Ruby прост по внешности, но он очень сложный внутри, как и наше человеческое тело.
Зачем изучать Ruby?
Для меня первая причина в том, что это красивый язык. Он всегда выражает мои мысли. Вторая – и основная причина – Ruby on Rails: фреймворк, который используется как в Twitter, Basecamp, Airbnb, Github, так и в многих других компаниях.
Введение
Ruby – это динамический язык с открытым исходным кодом, ориентированный на простоту и производительность. Он имеет элегантный синтаксис, который легко читать и писать
утверждает официальный сайт языка.
Давайте начнем с некоторых основ!
Переменные
Переменная – это ячейка памяти, которое хранит значение. В Ruby легко определить переменную и установить для нее значение. Представьте, что вы хотите сохранить номер 1 в переменную с именем one
.
Давай сделаем это!
one = 1
Согласитесь, это очень просто!
two = 2 some_number = 10000
Вы можете присвоить значение любой переменной, которую вы создали. В приведенном выше примере переменная two
имеет значение 2, а some_number
хранит 10 000.
Помимо целых чисел, мы можем также использовать логические значения (true / false), строки, символы, float и другие типы данных.
# booleans true_boolean = true false_boolean = false # string my_name = "Leandro Tk" # symbol a_symbol = :my_symbol # float book_price = 15.80
Условные операторы
Условные операторы оценивают true или false. Если что-то верно, оно выполняет то, что находится внутри оператора. Например:
if true puts "Hello Ruby If" end if 2 > 1 puts "2 is greater than 1" end
2 больше 1, поэтому выполняется puts
.
Оператор else
будет выполняться, если выражение if
равно false
:
if 1 > 2 puts "1 is greater than 2" else puts "1 is not greater than 2" end
1 не больше 2, поэтому код внутри оператора else
будет выполнен.
Также есть оператор elsif
. Вы можете использовать его следующим образом:
if 1 > 2 puts "1 is greater than 2" elsif 2 > 1 puts "1 is not greater than 2" else puts "1 is equal to 2" end
Один из способов, из-за которого я действительно люблю писать на Ruby – использовать оператор if
после выполнения кода:
def hey_ho? true end puts "let’s go" if hey_ho?
Это так красиво и естественно. Это Ruby.
Циклы / Итераторы
В Ruby мы можем выполнять итерацию в самых разных формах. Я расскажу о трех итераторах: while
, for
and each
.
While
: Пока утверждение истинно, код внутри цикла будет выполнен. Таким образом, этот код будет печатать число от 1 до 10:
num = 1 while num <= 10 puts num num += 1 end
For
: вы передаете переменную num
в цикл, и оператор for
будет перебирать ее для вас. Этот код будет работать так же, как и предыдущий:
for num in 1...10 puts num end
Each
: для массива значений он будет перебирать один за другим, передавая переменную циклу:
[1, 2, 3, 4, 5].each do |num| puts num end
Вы можете спросить, какая разница между for
и each
. Основное отличие состоит в том, что for
поддерживает переменную только внутри цикла, тогда как в each
переменная может находиться вне его.
# for vs each # for looping for num in 1...5 puts num end puts num # => 5 # each iterator [1, 2, 3, 4, 5].each do |num| puts num end puts num # => undefined local variable or method `n' for main:Object (NameError)
Массив: коллекции / списки
Представьте, что вы хотите сохранить число 1 в переменной. Но, возможно, теперь вы хотите сохранить 2. И 3, 4, 5… У меня есть способ сохранить все целые числа, которые я хочу, но не в миллионах переменных? У Ruby есть ответ!
Массив – это структура данных, которая может использоваться для хранения значений (таких как эти целые числа).
Так что давайте использовать его!
my_integers = [1, 2, 3, 4, 5]
Это действительно просто. Мы создали массив и сохранили его в my_integer. Вы можете спросить: «Как я могу получить значение из этого массива?» Хороший вопрос. Массивы имеют понятие, называемое индексом. Первый элемент получает индекс 0 (ноль). Второй получает 1 и так далее.
Ну вы поняли!
Используя синтаксис Ruby, это просто понять:
my_integers = [5, 7, 1, 3, 4] print my_integers[0] # 5 print my_integers[1] # 7 print my_integers[4] # 4
Представьте, что вы хотите хранить строки вместо целых чисел, например список имен ваших родственников. Мой был бы примерно таким:
relatives_names = [ "Anton", "Dmitriy", "Victor", "Andrey", "Kira" ] print relatives_names[4] # Kaio
Работает так же, как c целыми числами. Прекрасно!
Мы только что узнали, как работают индексы в массиве. Теперь добавим элементы в структуру данных массива. Наиболее распространенными методами добавления нового значения в массив являются push
и <<
. Вам просто нужно передать элемент в качестве параметра push
:
bookshelf = [] bookshelf.push("The Effective Engineer") bookshelf.push("The 4 hours work week") print bookshelf[0] # The Effective Engineer print bookshelf[1] # The 4 hours work week
Метод <<
немного отличается:
bookshelf = [] bookshelf << "Lean Startup" bookshelf << "Zero to One" print bookshelf[0] # Lean Startup print bookshelf[1] # Zero to One
Вы можете спросить: «Но он не использует точечную нотацию, как это делают другие методы. Разве это метод? Хороший вопрос! Напишем это:
bookshelf << "Hooked"
… похоже на это:
bookshelf.<<("Hooked")
Ну, хватит массивов. Давайте поговорим о другой структуре данных.
Хэш: структура данных с ключевыми значениями / коллекцией словарей
Мы знаем, что массивы индексируются номерами. Но что, если мы не хотим использовать числа в качестве индексов? Некоторые структуры данных могут использовать числовые, строковые или другие типы индексов. Структура хэш-данных является одной из них. Хэш представляет собой набор пар ключ-значение.
Он выглядит так:
hash_example = { "key1" => "value1", "key2" => "value2", "key3" => "value3" }
Ключ – это индекс, указывающий на значение. Как мы получаем доступ к хеш-значению? Используя ключ!
Вот хэш обо мне. Мое имя, псевдоним и национальность – это ключи хэша.
ash_tk = { "name" => "Dmitriy", "nickname" => "dd", "nationality" => "Russian" } print "My name is #{hash_tk["name"]}" # My name is Dmitriy print "But you can call me #{hash_tk["nickname"]}" # But you can call me dd print "And by the way I'm #{hash_tk["nationality"]}" # And by the way I'm Russian
В приведенном выше примере я напечатал фразу обо мне, используя все значения, хранящиеся в хеше. Еще одна интересная вещь о хэшах заключается в том, что мы можем использовать что-угодно в качестве значения. Я добавлю ключ «возраст» и мой реальный целочисленный возраст (19).
hash_tk = { "name" => "Dmitriy", "nickname" => "dd", "nationality" => "Russian", "age" => 19 } print "My name is #{hash_tk["name"]}" # My name is Dmitriy print "But you can call me #{hash_tk["nickname"]}" # But you can call me dd print "And by the way I'm #{hash_tk["age"]} and #{hash_tk["nationality"]}" # And by the way I'm 19 and Russian view raw
Давайте научимся добавлять элементы в хэш:
hash_tk = { "name" => "Dmitriy", "nickname" => "dd", "nationality" => "Russian" } hash_tk["age"] = 19 print hash_tk # { "name" => "Dmitriy", "nickname" => "dd", "nationality" => "Russian", "age" => 19 }
Нам просто нужно присвоить значение хэш-ключу. Ничего сложного здесь, не так ли?
На этом первая часть заканчивается. Во второй части мы обсудим основы объектно – ориентированного программирования в Ruby.
Перевод статьи ” Learning Ruby: From Zero to Hero “