01. Въведение в Ruby
7 октомври 2013
Административни неща
...където припомняме за какво идеше реч
- Ruby курс, в който влизаме дълбоко в заешката дупка
- Аз съм Митьо и зад мен има армия от помощници (ще ни видите на сайта)
- Понеделник (325) и Сряда (200) от 19:00
- Сайтът ни е fmi.ruby.bg — регистрирайте се
скоропостижно, ако все още не сте.
- Имаме Facebook група и
Twitter потребител, ако си падате по тези неща
Административни неща (2)
- Курсът е труден, тежък, страшен...
- Ако идвате само за кредити и/или оценка, по-добре отпишете
- Основно лекции (и някои други неща), нямаме упражнения
- Присъствието е силно препоръчително (така ще ви е доста по-лесно)
- Всичко се върти около сайта на курса и присъствие на лекциите, направете си сметка
- Разбира се, да не забравяме кръвта и потта от ваша страна
Добри новини (за изостаналите)
или как да изкарате първите си 3 точки
- Сложете си снимка на сайта
- Качете си Ruby 2.1 и качете screenshot на форумите
- НОВО! НОВО! НОВО! Представете се на форумите
По-добри новини
първа задача
- Ще ви я дадем още тази седмица (сряда)
- Ще имате една седмица
- Ще включва материал от днес и от сряда
- Припомняме, че ако не предадете повече от 3 задачи, ще се видим септември
Класация
Цели
За какво ще говорим днес?
- Какво е Ruby програма и как се изпълнява?
- Как да се справим с документацията в Ruby
- Основните типове в Ruby
- Променливи и константи
- Условни конструкции —
if
- Дефиниране и извикване на прости функции
Ruby програми
- Програмите в Ruby са текстови файлове
- Няма компилация като в C или Java
- Изпълняват се с
ruby име_на_файл
Ruby програми
Любимият на всички пример
puts "Hello world"
puts "The answer of life is ", 6 * 7
Изпълнява се с ruby hello.rb
irb
интерактивна конзола
irb
– Interactive Ruby
- REPL — Read-Eval-Print Loop
- Тук ще прекарваме доста време - и ние, и вие
- Стартирате я с
irb
(трябва да ви е в "пътя")
irb
интерактивна конзола
$ irb
>> 6 * 9
54
>> "Ruby! " * 4
"Ruby! Ruby! Ruby! Ruby!"
>> -10.abs
10
irb
особености
Ctrl + C
и Ctrl + D
- Windows - Copy/paste
- Синтактични грешки
- Алтернативни терминали/конзоли (вж. форумите)
- Мини демо тайм
Документация
или как да разберем какво прави нещо в Ruby?
ri
е инструмент, с който може да разглеждате документацията на клас или методri String
показва документацията на класа String
ri Numeric#abs
показва документацията на метода abs
на класа на числата ri -i
пуска документацията в интерактивен режим. Пробвайте го. - Документацията е достъпна онлайн на http://ruby-doc.org/
- APIDock е ваш добър приятел
Съставните части на една Ruby програма
ръководство по ориентиране
Инсталация
или как да се снабдим?
Редактори
вечният... дебат
- Забравете за IDE-тата, това не е Java, C# и прочее
- Ползвайте любимия си текстов редактор
- Ако нямате такъв, може да пробвате redcar ако много ви мързи
- Научете Vim или Emacs. После ще благодарите на Стефан.
- Аз бих ви посъветвал да пробвате и Sublime Text
Стил
- В момента говорим за "форматиране на кода", а не за дизайн
- Ако не можете да си подреждате кода, ориентирайте се към друга професия. Например строителство.
- Изискваме от вас стил като описания тук: Ruby Style Guide
- Горното е базирано на Ruby Style Guide на г-н Бацов и е малко остаряло
- Това не е просто мързел. В реалния свят такива неща се предават фолклорно.
- Ваша задача ще е да обновите ръководството по стил по-горе (разбира се, че ще ви платим)
Извеждане на екрана
или как да досаждате на хората с текст
- Става с
puts
- Например
puts "Chunky bacon!"
puts
не е ключова дума, а "глобална" функция- Може да се извика и със скоби:
puts("Chunky bacon!")
- Последното важи за всички функции в Ruby
Имена и неща
или още, Урсула ле Гуин в контекста на Ruby
Нещата се наименуват с =
answer = 42
almost_pi = 3.14
food = 'Chunky bacon'
greeting = "What's up?"
Имена и неща
...или разликата между нещо и неговите имена
=
не копира стойността, а насочва променливата към обекта отдясно
>> word = "oat"
>> breakfast = word
>> dinner = word
>> word.insert(0, 'g')
>> puts breakfast
goat
Действия
още известни като "методи"
>> "shut up".upcase()
→ "SHUT UP"
>> "wonderful".sub("wonder", "color")
→ "colorful"
>> 3.14.floor
→ 3
>> 24.gcd 56
→ 8
>> 'wonderful'.sub 'wonde', 'colo'
→ "colorful"
Видове променливи
favourite = 'Chunky bacon' # локална
Tax = '20%' # константа
$important = 'Money' # глобална
Има още: @name
и @@name
Ключови думи
Вече заети
alias and BEGIN begin break
case class def defined? do
else elsif END end ensure
false for if in module
next nil not or redo
rescue retry return self super
then true undef unless until
when while yield
Основни типове
1/2
- Цели числа —
42
, -271
, 1_024
- Низове —
"chunky"
, 'bacon'
- С плаваща запетая —
3.1415
- Булеви —
true
и false
- Нищо —
nil
- Масиви —
[2, 3, 5, 7, 11]
Основни типове
2/2
- Хешове —
{'one' => 1, 'two' => 2}
- Регулярни изрази —
/(bb)|([^b]{2})/
- Области —
2..6
, 'a'...'z'
- Символи —
:name
, :send
- Анонимни функции —
lambda { |x| x ** 2 }
, -> x { x ** 2 }
- Обекти —
Person.new
Цели числа
0
1729
-271
1_000_000
0377 # осмични
0b0100_0010 # двоични
0xDEADBEEF # шестнадесетични
Числа с плаваща запетая
0.0
3.14
-273.15
1.22e28
1_000.001
Текст
'Chunky bacon, I say!'
"Who is John Galt?"
"We're the knights who say \"Ni!\""
'\'0 freddled gruntbugly\' he begun'
'This text contains\nno newlines'
"This text contains\none newline"
Операции с текст
>> "Hello, " + " " + "chunky!"
→ "Hello, chunky!"
>> "Ha! " * 3
→ "Ha! Ha! Ha! "
>> "%s bacon" % 'Chunky'
→ "Chunky bacon"
>> text = 'Chanky'
>> text[2] = 'u'
>> text << ' bacon'
>> puts text
Chunky bacon
Още операции с текст
"bacon\n".chop # "bacon"
"bacon".chop # "baco"
"bacon\n".chomp # "bacon"
"bacon".chomp # "bacon"
"Goodbye".include? 'oo' # true
"Danube".length # 6
"oat".insert 0, 'bl' # "bloat"
"bloat".sub "bl", "m" # "moat"
"bacon".upcase # "BACON"
"BaCoN".downcase # "bacon"
Символи
...което ще ви обърка
- Малко особен тип в Ruby
:something
, :other
и :larodi
- Сходен на низ — immutable и интерниран
- Различни приложения
- Не го мислете много
Интерполация
Работи при двойни кавички, не работи при единични
character = 'Arthur'
answer = 42
puts "#{character} had it: #{answer}"
Оператори
...или как да оперирате с Ruby
** ~ / % + - &
<< >> | ^ > < >= <= <=>
&& || ! and or not ||= &&=
= += -= *= /= %= **= >>= <<=
^= &= |= .. ... defined?
Истина и лъжа
...където става философско
nil
се оценява като "лъжа"false
се оценява като "лъжа" (очевидно)- всичко друго е истина
0
, ""
и []
са истина