01. Въведение в Ruby

01. Въведение в Ruby

01. Въведение в Ruby

11 октомври 2011

Колективът ти

...където обяснявам защо си говоря в множествено число

Цели

За какво ще говорим днес?

Ruby програми

Ruby програми

Любимият на всички пример

puts "Hello world"
puts "The answer of life is ", 6 * 7 

Изпълнява се с ruby hello.rb

irb

интерактивна конзола

Може да стартиране интерактивната конзола с irb

$ irb
>> 6 * 9
54
>> "Ruby! " * 4
"Ruby! Ruby! Ruby! Ruby!"
>> -10.abs
10 

Документация

или как да разберем какво прави нещо в Ruby?

Инсталация

или как да се снабдим?

Редактори

слайдът с много хейт

Извеждане на екрана

Или как да досаждаме на хората с текст

Имена и неща

или още, Урсула Ле Гуин в контекста на Ruby

Нещата се наименуват с =

answer = 42
almost_pi = 3.14
food = 'Chunky bacon'
greeting = "What's up?" 

Имена и неща

Разликата между нещо и неговите имена

= не копира стойността, а насочва променливата към обекта отдясно

>> word = "oat"
>> breakfast = word
>> dinner = word
>> word.insert('g', 0)
>> 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

Основни типове

2/2

Цели числа

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 day \"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" 

Символи

...което ще ви обърка

Интерполация

Работи при двойни кавички, не работи при единични

character = 'Arthur'
answer = 42
puts "#{character} had it: #{answer}" 

Оператори

...или как да оперирате с Ruby

**  ~   /   %   +   -   &
<<  >>  |   ^   >   <   >=  <=  <=>
&&  ||  !   and or  not ||= &&=
=   +=  -=  *=  /=  %=  **= >>= <<=
^=  &=  |=  ..  ... defined? 

Истина и лъжа

...където става философско

Булеви оператори

Сравнение

...когато размерът има значение

>> 20 > 20
→  false
>> "perl" < "ruby"
→  true
>> 5 <= 5
→  true
>> "foo" <=> "bar"
→  1 

Равенство

...където става оплетено

В Ruby има четири оператора за равенство

one == two
one === two
one.eql? two
one.equal? two 

Равенство

== и equal?

Това е стандартното поведение на Ruby. Има специални случаи.

>> one = 'chunky bacon'
>> two = 'chunky bacon'
>> one == two
→  true
>> one.equal? two
→  false 

Равенство

Специалните случаи

Можете ли да произнесете "интерниране"?

>> one, two = 42, 42
>> one == two
→  true
>> one.equal? two
→  true 

Същото важи и за символи.

Условия

Ключовата дума е if

if hungry? and sad?
  eat_chocolate
  listen_to_music
  go :outside
end 

Условия

или

Разбира се, има и else

if hungry?
  eat
else
  drink
end 

Условия

ако пък

if hungry?
  eat
elsif thirsty?
  drink
else
  philosophize
end 

Условия

на един ред

Може да напишете това на един ред

eat if hungry? 

Условия

...където научавате, че всяко условие е израз

classification = if age < 13
                   'young person'
                 elsif age < 20
                   'teenager'
                 else
                   'old dude'
                 end 

Условия

на един ред

eat if hungry? 

Яко, а? Може и:

order = if hungry? then 'food' else 'coffee' end 

Условия

Освен ако

unless е като if not.

Всичко за if е приложимо

unless tired?
  go_out_and_run
end 

Въпроси