Занятие 6. Синтаксис ruby и базовые вещи
Конспект Евгения.
0) запуск из консоли.
1) переменные
2) основные классы
3) методы. определение и вызов.
4) rubykoans
Ру́би — интерпретируемый язык программирования высокого уровня. Обладает независимой от операционной системы реализацией многопоточности, строгой динамической типизацией, «сборщиком мусора» и многими другими возможностями, поддерживающими много разных парадигм программирования, прежде всего классово-объектную.
( http://ru.wikibooks.org/wiki/Ruby )
Запуск
Для руби существуюет интерактивная консоль irb - очень похожа на консоль из rails ( rails console), но без многих встроенных в рельсы библиотек. Удобно если надо протестировать небольшой кусок кода или отдельные выражения. Запуск из консоли ( shell или cmd) : irb.
Файлы программ на ruby имеют расширение *.rb. Что бы запустить программу, надо выполнить комадну ruby file.rb, где file.rb - имя программы. для *nix систем существует возможность сделать программу исполняемой. для этого необходимо в самом начале программы указать интерепретатор “#!/usr/bin/env ruby” или “#!/usr/bin/ruby”, а потом дать права файлу на исполнение “chmod u+x ./file.rb”. после этого программу можно запускать как обычный выполняемый скприпт /path/to/file.rb
Вывод на экран
В Ruby есть много методов вывода: print, printf, p, puts, .display и другие.
* метод puts. После вывода строки осуществляет переход на новую. Если приходится выводить объект, не являющийся строкой, то puts вызывает метод .to_s для преобразования его к строке;
* метод p. Имеет самое короткое название, из-за чего часто используется для отладки. Так же, как и puts, делает перевод на новую строку после вывода. Перед выводом любого объекта (в том числе и строки) на экран, вызывает метод .inspect.
* метод print. Выводит на экран без перевода каретки, в остальном аналогичен методу puts
Примеры вывода на экран:
puts [1, 2, 3, 4] #=> 1n2n3n4 n означает перевод строки
p [1, 2, 3, 4] #=> [1, 2, 3, 4]
puts “Hello!” #=> Hello!
p “Hello!” #=> “Hello!”
puts 5 #=> 5
В руби существует два способа комментирования текста # - закомментирует все до конца строки, многострочный комментарий отмечается как
=begin ( обязательно с начала строки)
=end
Переменные.
В ruby приняты следующие способы именования переменных:
variable_name
variable_2
ClassName
ModuleName
CONSTANT
в руби переменная объявляется при первом присвоении ей значения. переменные класс ( содержат @ в начале имени - @variable_name ) объявляются при первом их упоминании, и содержат nil по умолчанию. Все переменные указывают на объект. Стандартные объекты nil, true, false - тоже являются объектами ( уточнить класс можно через variable.class )
Базовые классы руби.
Целые числа
Целые числа в Ruby не ограничены по величине, то есть могут хранить сколь угодно большие значения. Для обеспечения такого волшебного свойства было создано два класса. Один из них хранит числа меньшие 230 (по модулю), а второй — всё, что больше. По сути, для больших чисел создаётся массив из маленьких, а раз массив не имеет ограничений по длине, то и число получается неограниченным по значению. К сожалению, эти ограничения налагаются используемой базой данных - впрочем, можно хранить числа как строки.
Числа с плавающей запятой
Числа с плавающей запятой задаются только в десятичной системе счисления, при этом для отделения дробной части используется символ . (точка). Для задания чисел с плавающей запятой может быть применена и экспоненциальная форма записи: два различных представления 0.1234e2 и 1234e-2 задают одно и тоже число 12.34.
Арифметические операции в Ruby обычны: сложение (+), вычитание (-), умножение (*), деление (/), получение остатка от деления (%), возведение в степень (**). Если все аргументы арифметического выражения целые числа, то результат будет целым, если хотя бы одно число с плавающей запятой, то результат будет числом с плавающей запятой.
Строка.
Строка — это упорядоченная последовательность символов, которая располагается между ограничительными символами.
Строковый тип является самым популярным в любом языке программирования. Ведь без него невозможно написать любую программу (особенно учитывая, что любая программа — это строка). При выводе на экран или записи в файл, любой тип данных преобразуется к строке (явно или неявно). Это значит, что в конечном итоге всё сводится к строковому типу. Кстати, и ввод данных тоже осуществляется в виде строки (и только потом преобразуется в другие типы).
Способы создания строки
Строка создаётся при помощи ограничительных символов. Для этих целей чаще всего используются ” (программистская кавычка) и ‘ (машинописный апостроф). Их смысл различен. Строка в апострофах гарантирует, что в ней будет содержаться тот же текст, что и в коде программы, без изменений. Строка в кавычках будет проходить предварительное преобразование. Внутри строки с ” можно использовать спец символы , экранируя их , и вставку кода руби - через “hello, #{user.name}”. внутри строки ‘ нельзя использовать спец символы и #{}.
Массивы.
Массив создаётся как минимум трёмя способами. Первый способ:
[1, 2, 3, 4, 5, 6]
Вы просто перечисляете элементы массива через запятую, а границы массива обозначаете квадратными скобками. С таким методом создания массива мы уже встречались. А теперь попробуем второй способ, через вызов метода .new класса Array:
Array.new(6){ |index| index + 1 } #=> [1, 2, 3, 4, 5, 6]
Параметром метода .new является количество элементов будущего массива (в данном случае это число 6). В фигурных скобках указано, как мы будем заполнять массив. В данном случае значение элемента массива будет больше на единицу его индекса. Третий способ заключается в создании объекта типа Range (диапазон) и вызове метода .to_a:
(1..6).to_a #=> [1, 2, 3, 4, 5, 6]
Класс Array содержит обширную библиотеку методов. Итераторы, логические методы, работа с каждым элементом или работа со всем массивом в целом. Наиболее часто используются методы .each - проходит по всем элементам массива и выполняет некоторую операцию. и метод map ( collect ) - выполняет некоторый код с каждым элементом и возвращает новый массив, состоящий из результатов работы каждого блока.
[1,2,3,4,5].map{|element| element * element} # => [1,4,9,16,25]
Различают два типа массивов: индексные, у которых в качестве индекса только целое число и ассоциативные, где индексом может быть любой объект.
Хеши можно представить как массив пар: ключ=>значение. Но в отличие от массива, хеш неупорядочен: нельзя заранее сказать, какая пара будет первой, а какая последней. Правда, удобство использования массива это шибко не умаляет. Более того, поскольку в Ruby переменные не типизированы и методам с похожей функциональностью дают похожие имена, то использование хеша чаще всего равносильно использованию массива.
Хеш обозначается как {}.
{”март”=>400, “январь”=>350, “февраль”=>200}
методы.
Все функции в Ruby являются методами, то есть свойственны обьектам. При программировании на это можно не обращать внимания, поскольку любая программа на Ruby уже является определением класса. У методов могут быть обязательные или необязательные параметры. Методы разграничиваются фигурными скобками или ключевыми словами def и end.
def method_name(firstname, nickname = ‘undefined’, options = {})
Определения говорит о том что аргумент метода имеет базовое значение ‘undefined’, а аргумент options имеет значение по умолчанию - пустой хеш. данный метод можно вызвать следующими способомаи
* method_name ‘code’ # передаем одно значение, остальные будут использоваться дефолтовые.
* method_name(’code’) # то же самое, скобки желательно использовать для улучшения читабельности
* method_name ‘code’, ‘anonimous’
* method_name ‘code’, ‘anonimous’, :as_troll => true
* method_name(’code’, ‘anonimous’, { :as_troll => true })
rubykoans можно слить отсюда http://rubykoans.com/. кому лень читать, просто выполните
git clone git://github.com/edgecase/ruby_koans.git
перейти в каталог ruby_koans/koans
набрать rake
дальше редактируете те файлы, в которых ошибка. удачи
на прошлом занятии вы просили отписаться в блоге тех, кто ходит на обучении
соответствующей темы не нашел ,поэтому отписался здесь
Аз есмь Никита. Курсы посещаю, прогуливать не осмеливаюсбь!
По именованию переменных не совсем так.
С маленькой буквы начинаются переменные, с большой — константы.
Названия классов и модулей — частный случай констант.
(То, что “простые” константы записываются заглавными буквами, а названия классов КемелКейсом — не более, чем соглашение).
Т.е. конструкция String=Fixnum естественно будет не верной как раз потому что String — константа.
С другой стороны присвоить класс переменной вполне возможно (например, container=Array) — тогда можно будет работать с этой переменной как с классом — создавать его экземпляры, наследовать и т.д. Правда, я сходу не придумаю зачем это может быть нужно =)
И ошибка там еще небольшая: переменные вида @abc — это переменные экземпляра класса. Переменные класса же (общие для всех экземпляров плюс также доступные из методов класса) записываются как @@abc.
Так же хочу сообщить, что курсы регулярно посещаю
Присоединяюсь к вышеотметившимся ;)
+1
А где корзина?
Курсы посещаю.
Вспомнилось:
>PS. Для заинтересованных, приходите с большими флешками - можем скинуть настроенный образ railsdev на CentOS’е. Как разработчикам - очень пригодится.
Что это, как использовать, где взять и какого объёма нужна флешка?
Антон, взять можно на занятии, это образ дев-сервера с установленными третьими рельсами и т.д.
Флешка нужно порядка 8 гигов
Курсы посещаю.
Надеюсь увидеть отчет о седьмом занятии :)
У нас ожидаются остальные лекции в блоге или как? А то давно уже пополнения не было..
результаты 7,8 дня можно увидеть и скачать тут
https://github.com/evgeniypetrov/seminar4shop
git clone git@github.com:evgeniypetrov/seminar4shop.git
Результаты то ладно, я уже откопал это. Огорчает, что без комментов =(