Istnieją dwa popularne style wybierania do end
i { }
blokowania w Rubim:
Pierwszy i bardzo popularny styl został spopularyzowany przez Ruby on Rails i opiera się na prostej zasadzie pojedynczej i wieloliniowej:
- Użyj nawiasów klamrowych
{ }
dla bloków jednowierszowych
- Służy
do end
do bloków wieloliniowych
Ma to sens, ponieważ do / end czyta źle w jednowierszowym, ale w przypadku bloków wieloliniowych, pozostawienie zamknięcia }
wiszącego w osobnym wierszu jest niespójne ze wszystkim innym, co używa end
w ruby, takim jak definicje modułów, klas i metod ( def
itp. zwalczania.) i ( if
, while
, case
etc.)
Drugi, rzadziej spotykany styl znany jest jako semantyczny lub „ Weirich Braces ”, zaproponowany przez nieżyjącego już, wielkiego rubinisty Jima Weiricha:
- Używaj
do end
do bloków proceduralnych
- Użyj szelek
{ }
do bloków funkcjonalnych
Oznacza to, że gdy blok jest oceniany pod kątem wartości zwracanej , powinien być możliwy do utworzenia łańcucha, a {}
nawiasy klamrowe mają większy sens w przypadku łączenia metod.
Z drugiej strony, gdy blok jest oceniany pod kątem skutków ubocznych , zwracana wartość nie ma żadnego znaczenia, a blok po prostu coś „robi”, więc nie ma sensu być łączonym w łańcuch.
To rozróżnienie w składni przekazuje wizualne znaczenie oceny bloku i tego, czy należy dbać o jego zwracaną wartość.
Na przykład tutaj wartość zwracana bloku jest stosowana do każdego elementu:
items.map { |i| i.upcase }
Jednak tutaj nie używa wartości zwracanej przez blok. To działa proceduralnie, a robi to efekt uboczny z nim:
items.each do |item|
puts item
end
Kolejną zaletą stylu semantycznego jest to, że nie trzeba zmieniać nawiasów klamrowych na wykonanie / zakończenie tylko dlatego, że do bloku dodano wiersz.
Z obserwacji wynika, że przypadkowo bloki funkcjonalne są często jednowierszowe, a bloki proceduralne (np. Config) są wieloliniowe. Więc podążanie za stylem Weiricha wygląda prawie tak samo jak styl Rails.