Rubynovich

Присоединился 24 мая 2006
1545 байт добавлено ,  15 лет назад
 
Как мы видим, нам не только удалось избавиться от двух присваиваний, но и превратить переменную в параметр. Кстати, решение задачи получилось "в одну строчку".
 
=== Отсутствие циклов ===
Чем же так плохи циклы? Тем, что "зацикливаются" и заранее нельзя указать количество итераций, которые они выполнят. Эта неопределенность погубила не одно поколение программистов. Поэтому и была придумана концепция итераторов, т.е. циклических конструкций, количество итераций которых заранее известно. Пример цикла:
 
a = [1,2,3,4,5,6]
i = 0
while i < a.size do
puts a[i]
i += 1
end
 
Как вы можете видеть, здесь не только использование цикла, но и двойного присваивания. С итератором эта программа будет выглядеть так:
 
a = [1,2,3,4,5,6]
a.each{ |elem|
puts elem
}
 
Стоит заметить, что мы избавились не только от двойного присваивания и цикла, но и от переменной, которая превратилась в параметр блока итератора.
 
=== Отсутствие условных конструкций if, case и т.д. ===
 
Естественно, что пример был выбран искусственно, но сама по себе идея достаточно интересна. Кстати, как написать программу, которая выводит "a == b" или "a != b"?
== Вместо заключения ==
Вот так посмотришь на все программы, которые получаются в результате преобразований и Rubynovich уже не кажется таким уж сумасшедшим.
1581

правка