Расширенные базовые элементы Ruby
Этот урок освещает темы, которые пока мало затрагивались в нашем курсе. Мы подробно рассмотрим такие темы как: управление процессом исполнения программы, циклы, массивы, хеши, блоки и строки. Все это будет рассмотрено подробнее, чем в предыдущих разделах. Проекты в секции Задания рассчитаны на самостоятельную работу, потому что Codeacademy может дать всю информацию которая может понадобиться.
Пункты для размышления
Посмотрите эти пункты сейчас, а затем с их помощью проверьте себя после выполнения задания.
Внимание: Это опять огромный список вопросов. Просмотрите его сейчас, потом глубоко вдохните, сделайте задание и уже после этого возвращайтесь к нему.
Условия и управление процессом исполнения
- Что такое
boolean
? - Какие значения возвращают
true
? - Что вернут
nil
,0
,"0"
,""
,1
,[]
,{}
and-1
,true
илиfalse
? - Когда используется
elsif
? - Когда используется
unless
? - Что делает
<=>
? - Зачем может понадобиться определять свой метод
<=>
? - Что делают операторы
||
,&&
и!
? - Что вернет вызов
puts("woah") || true
? - Что такое
||=
? - Что такое тернарный оператор?
- Когда используется оператор
case
?
- Что такое
Итерации
- Что делает
loop
? - Какими двумя способами можно определить блок кода?
- Что такое индексная переменная?
- Как вывести на экран каждый элемент массива
[1,3,5,7]
с помощью:loop
?while
?for
?#each
?#times
?
- Какая разница между
while
иuntil
? - Как остановить цикл?
- Как пропустить следующую итерацию цикла?
- Как запустить цикл заново?
- Какие основные различия между ситуациями когда стоит использовать
while
или#times
или#each
? - Что значит "внутренные циклы" и когда их стоит использовать?
- Что делает
Блоки, Proc и лямбды:
- Чем блок схож с функцией?
- Чем блок отличается от функции?
- Какими двумя способами объявить блок?
- Как вернуть данные из блока?
- Что происходит когда вы включаете оператор
return
в блок? - Для чего стоит использовать блок вместо простого объявления метода?
- Что делает
yield
? - Как передать аргументы в блок изнутри метода?
- Как проверить вызывался ли блок?
- Что такое proc?
- Какая разница между proc и блоком?
- Когда стоит использовать proc вместо блока?
- Что такое замыкание (closure)?
- Что такое лямбда?
- Какая разница между лямбдой и proc?
- Что такое
Method
(с большой М)? - Что Методы позволяют сделать такого, что возможно будет полезным в дальнейшем при разработке более продвинутых программ?
Перечисления (Enumerable) и модули
- Что такое модули?
- Чем полезны модули?
- Что делает
#each
? - Что возвращает
#each
? - Что делает
#map
? - Что возвращает
#map
? - В чем разница между
#map
и#collect
? - Что делает
#select
? - Что возвращает
#select
? - Какая разница между
#each
,#map
и#select
? - Что делает
#inject
? - Для чего можно использовать
#inject
? - Как проверить, удовлетворяет ли каждый элемент в хеше определенному условию?
- Что будет, если ни один из элементов не удовлетворяет условию?
- Что такое (в основном)
enumerator
?
Написание методов
- Сколько вещей должен делать метод в идеале?
- Какие типы объектов должен модифицировать метод?
- Как стоит называть методы?
- Что значит
self
? - Что надо сделать чтобы создать свой файл Ruby скрипта?
- Как запустить свой Ruby скрипт из командной строки?
- Как убедиться, что что ваш скрипт был запущен из командной строки?
- Что делает "shebang" строка?
- Что делает
require
? - Что делает
load
? - В чем разница между
load
иrequire
? - Как получить доступ к параметрам, которые были переданы файлу скрипта из командной строки?
- Что делает
#send
? - Отличается ли использование
#send
от обычного вызова метода объекта?
Ваше задание
Выполнить Секции 2-6 курса от Codeacademy, включая:
Завершить Beginning Ruby Глава 3:
Ruby's Building Blocks: Data, Expressions, and Flow Control
(страницы 50-76)Посмотреть следующие посты Эрика Траутмана для более углубленного понимания
Проверьте себя
Убедитесь, что вы можете пройти следующие тесты от Code Quizzes. Они не требуют много времени и могут дать вам понимание, чего вам не хватает.
Дополнительные ресурсы
Здесь собраны полезные ссылки на другие источники информации. Изучать их необязательно, но они могут быть полезны для более глубокого погружения в материал
- До сих пор неуверены в
Enumerable
? Прочтите Главу про Enumerable в Bastard's Book - Гист на гитхабе про Truthiness
- Посмотрите эти ответы про оператор Spaceship
- Прочтите раздел про управление процессом исполнения от Zetcode для более глубокого погружения в тему.
- Если хотите немного большего запись про циклы и итераторы в Ruby от Skork
- Понимание Blocks Procs and Lambdas
- Почему существуют различные варианты передачи блока методу: неочевидный с помощью yield и очевидный - с указанием наличия блока в числе аргументов? Какая разница? (с SO)
- Написание собственных методов
- Краткое руководство по написанию методов wikibooks
- Введение в Hello World
- LRTHW главы 13-14