У Ruby є два загальні стилі вибору do end
проти { }
блоків:
Перший і дуже поширений стиль був популяризований Ruby on Rails і базується на простому правилі синглу проти багатолінійності:
- Використовуйте дужки
{ }
для однорядкових блоків
- Використовувати
do end
для багаторядкових блоків
Це має сенс, оскільки do / end читає погано в однорядковому блоці, але для багаторядкових блоків залишення закриття }
висить у власній лінії не відповідає всім іншим, що використовується end
в рубіні, таких як визначення модулів, класів та методів ( def
тощо) .) і керуючі структури ( if
, while
, case
і т.д.)
Другий, менш часто зустрічається стиль, відомий як семантичний, або " брекети Вейріха ", запропонований покійним, великим рубіністом Джимом Вейріхом:
- Використовувати
do end
для процедурних блоків
- Використовуйте дужки
{ }
для функціональних блоків
Це означає, що коли блок оцінюється на його повернене значення , він повинен бути дозволений, а {}
дужки мають більше сенсу для ланцюжка методів.
З іншого боку, коли блок оцінюється за його побічними ефектами , тоді повернене значення не має жодного наслідку, а блок просто щось "робить", тому не має сенсу бути ланцюжком.
Ця відмінність у синтаксисі передає візуальне значення щодо оцінки блоку та того, чи варто вам піклуватися про його повернене значення.
Наприклад, тут повернене значення блоку застосовується до кожного елемента:
items.map { |i| i.upcase }
Однак тут не використовується повернене значення блоку. Він працює процедурно і виконує з ним побічний ефект:
items.each do |item|
puts item
end
Ще одна перевага семантичного стилю полягає в тому, що вам не потрібно змінювати дужки, щоб зробити / закінчити лише тому, що до блоку була додана лінія.
Як спостереження, випадково функціональні блоки часто є однолінійними, а процедурні блоки (наприклад, конфігурація) є багаторядковими. Отже, слідування стилю Вейріха в кінцевому підсумку виглядає майже так само, як і стиль Rails.