Почему в классических языках программировании (в императивных в основном), вместо, например x:=10 THEN y=1 принято писать IF y=1 THEN x:=10. ИМХО, {...} FOR i:=[1..10] гораздо читабельней и понятней, чем FOR i:=0 TO 10 DO {...}. Эти префиксы отвлекают от понимания смысла программы. Может быть такой язык программирования уже есть?
SEC70R_VA "then" - это "тогда" или "в таком случае", а не "потому что". И в каком порядке должны следовать эти i? "to" по крайней мере подразумевает направление. Хотя, конечно, было бы правильнее что-то типа "for i from 1 to 10 step 1" или "from 1 to 10 change i", но кульхацкеры с многабукаф дристали бы шлакоблоками.
GoldFinch приведите, пожалуйста, пример с похожим на описанный мной синтаксис. для сишного while (i=1;10;i++) {} тоже самое; по тексту программы приходится отслеживать всякие переменные, напрямую не связанные с "главным потоком" программы, такие как, итераторы циклов, и т.д. CyberManiac, имелось в виду "WHEN". в Паскале, кстати, очень удобно реализованы множества. поэтому можно писать i:=[1,2,3,4,5,6,7,8,9,10,20], что эквивалентно i:=[1..10,20] а ELSE вынести перед всей конструкцией с "WHEN": Код (Text): x:=20 // Вместо ELSE x:=10 WHEN y=1
SEC70R_VA FOR i:=[1..10] - любой современный язык, включая последнюю версию С++ это называется range-based for loop. x:=10 WHEN y=1 - питон, перл, маткад (и наверное много других)
SEC70R_VA Ну, во-первых, не while, а for. А, во-вторых, возможности C'шного for'а далеко не ограничиваются итерированием переменной по арифметической прогрессии. Там три выражения в for'е: инициализация, проверка на продолжение цикла, и переход к следующему элементу. Например это можно использовать и так: for(item = first(list); item != NULL; item = next(item)) { }; for(f = findFirstFile(...); f; f = findNextFile) {...} Запись циклов типа 'for i in [1..10]' называется syntactic sugar -- синтаксический сахар. Потому как сама по себе запись гораздо более ограничена в возможностях, чем for в общем виде, но когда она применима, она делает код лаконичнее. Такие языки как C вообще не парятся на этот счёт: если кому-то это надо настолько, что без этого никак, пускай он сам пишет макросы. А языки поновее, и особливо скриптовыеб очень любят "подсластить" код. Гляньте на perl, к примеру Код (Text): print $_ foreach 0 .. 10; . Или, скажем, в ruby: Код (Text): (1 .. 10).each{ |i| puts i }
SEC70R_VA Хм... Какой язык программирования ты знаешь лучше всего и сколько лет у тебя в нем опыт? Ну просто интересно.
а for сахар по отношению к while, while - сахар по отношению к if и goto и т.д. вплоть до asm достали со своим "сахаром", кулхацкеры млин
это может только по неопытности обычно весь этот шум синтаксисческий не замечаеш сразу видно алгоритм глаза не зацепляются на синтаксисе если автор ну уж очень сильно не постарался извратить код напротив глаза ищут только поток управления общий и вычисляют алгоритм
В чем проблема то ? + на (Б-г прости меня)Паскале можно написать 10 строчек в которых без бутылки пива не разберешься, а можно на асме написать 1000 которые прочитаешь на одном дыхании... Читабельность исходников зависит от того, кто их написал. Ок. Чем это не читабельно ? C# Код (Text): int[] ilikesomeshit = new int[] { 0, 1, 2, 3, 5, 8, 13 }; foreach (int i in ilikesomeshit) { ..... } 63F45EF45RB65R6VR Вот кстати и пример:
SEC70R_VA А что делать с i:=[10,9,...,1]? По факту интервал тот же, а задаётся задом наперёд. В Delphi 2009 и выше для новой конструкции i in ... в документации специально оговорено, что она исполняет цикл от меньших значений к большим. А это вообще две большие разницы. Допустим, функция Fucktion делает тебе сеанс киберсекса, а Function - взрывает компьютер. if MyVar then Fucktion else Function либо ублажает тебя, либо взрывает комп, а Function Fucktion when MyVar взрывает комп всегда.
GoldFinch Наоборот! Ведь while -- это урезанный for: можно писать for(;a<b, а можно написать while(a<b). А вот здесь вы неправы совершенно. for/while загоняют программиста в рамки структурного программирования. Вы, как я понимаю, записались в воинствующие противники словосочетания "синтаксический сахар"? И совершенно зря. Все ваши примеры, показывают что вы просто услышав это словосочетание обобщаете его до абсурда. Но склонность к таким обобщениям -- это признак максимализма. Не надо быть максималистом. Тогда гораздо большее количество человеческих изобретений окажутся для вас полезными. А чтобы понять, до куда принято обобщать "синтаксический сахар", а какие обобщения уже лишние, посмотрите на Haskell. В Haskell слова "синтаксический сахар" появляются чуть ли не в reference manual. Я бы мог попытаться объяснить это своими словами, но это такие тонкие материи, что я боюсь не справлюсь.
r90 Сишный for - сам по себе анальнорожденный плод межвидового секса. У нормальных людей всегда был отдельно цикл с предусловием, отдельно - с постусловием и совсем уже отдельно - со счётчиком.
Кури маны по perl, там много чего "не как привыкли" можно сделать. Но за это другие тебя могут поубивать.
SadKo Тогда уж по Форту. Или по новомодному Фактору, который был бы идеальным Фортом, да только он не компилятор и потому с WinAPI как-то совсем дикостно скрещивается.
CyberManiac Вы явно не представляете себе, что есть "анальнорождённый плод межвидового секса". Гляньте, например, на макрос loop в Common Lisp, вот это даа... Вот это точно межвидовой секс, причём групповой и с элементами bdsm.
r90 Мда, брутально. Но до циклов в Прологе не дотягивает. Не случайно Пролог сохранился только в Японии - чтобы на нём писать, нужно быть абсолютно безжалостным к себе. Те, кто раньше шёл в камикадзе, сейчас идут в программисты на Прологе