Rubynovich

Присоединился 24 мая 2006
670 байт добавлено ,  15 лет назад
a = 5
 
Это выражение является более правильным с точки зрения высокоуровневого программирования. Давайте рассмотрим немного более сложный пример неправильного кода:
Поэтому выражение:
 
bsum = a + 50
(1..5).each{ |i| sum += i }
p sum
 
Как мы видим, внутри блока присутствует второе присваивание, что противоречит нашему принципу. Как от него избавиться? Использовать не .each, а специализированный метод для суммирования/умножения/конкатенации .inject:
является более правильным с точки зрения высокоуровневого программирования, т.к. b выступает в качестве константы (если только она не изменяется присваиванием в последующем коде программы).
 
p (1..5).inject( 0 ){ |sum,i| sum + i }
 
Как мы видим, нам не только удалось избавиться от двух присваиваний, но и превратить переменную в параметр. Кстати, решение задачи получилось "в одну строчку".
 
=== Отсутствие условных конструкций if, case и т.д. ===
1581

правка