Istnieją dwa popularne style wybierania do endi { }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 enddo 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 endw ruby, takim jak definicje modułów, klas i metod ( defitp. zwalczania.) i ( if, while, caseetc.)
Drugi, rzadziej spotykany styl znany jest jako semantyczny lub „ Weirich Braces ”, zaproponowany przez nieżyjącego już, wielkiego rubinisty Jima Weiricha:
- Używaj
do enddo 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.