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

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

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

6 октомври 2014

Административни неща

...където припомняме за какво идеше реч

Административни неща (2)

Добри новини (за изостаналите)

или как да изкарате първите си 3 точки

По-добри новини

първа задача

Още по-добри новини

първо предизвикателство

Класация

Това е от миналата година. Тази година сте доста по-пъргави и класацията е еднообразна в момента :)

Цели

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

В случай на въпрос

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 

irb

особености

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

или как да разберем какво прави нещо в 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

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

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

Символи

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

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

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

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

Условия

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

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 с else (style warning!)

unless tired?
  go_out_and_run
end

Въпроси