Думаю, просто название "С" - слишком короткое, а "С++" ещё и пугающее - какие то плюсЫ там еретические... а когда там еще и непонятные скобки встречаются на каждом шагу ... то тут уже при беглом взгляде на код Любитель Дельфи закрывает IDE/Блокнот/Книгу с мыслью "да ну его нах". А ещё, плохо крякнутые игры частенько падали с ошибками C++ Runtime, что уже какбэ намекает на то что С++ отстой :D Не холивар.
А по сабжу - наверное потому почему и выбирают MVC вместо IC. Не холивар. )
SNVampyre
> Вобщем гондурасский код.
Конечно гондурасский, явно написанный гондурасом не знающим что такое case.
кстати, switch приплюснутый требует идиотские break. да, есть задачки, которые можно решить, если не ставить break в case, но таких задач меньшиство, гораздо логичнее было сделать оператор перехода к следующему элементу, чем оператор прерывания, который нужно тыкать каждый раз.
SNVampyre
> а программисты будут писать короткий и красивый код.
Нормальные программисты не экономят на читабельности ради короткого кода и пишут нормальный и красивый код, причем с хорошей скоростью за счет грамотного автодополнения. В часности писать end не приходится вообще никогда, потому что IDE сама его подставляет. Все остальные идентефикаторы тоже. Методы класса оформляются автоматически, сеттеры/геттеры оформляются автоматически.
Так что пока ты экономишь на : в присвоении, мы пишем код, а не одинаковые конструкции, которые генерит IDE.
НЕ холивар. :)
UPD:
На любом языке можно писать криво, что и показывает этот пример.
Должно быть:
value2 := value+1;
Если уж там не такой идиотский случай:
case value of 0:value2:=1; 1:value2:=2; 2:value2:=3; 3:value2:=4; end;
на с++ будет
switch(value){ case 0: value2 = 1; break; case 1: value2 = 2; break; case 2: value2 = 3; break; case 3: value2 = 4; break; };
Где кода меньше?
UPD2:
По поводу for.
C++ for мощнее, но он и не for вовсе, это самый обычный while, с слегка другим синтаксисом.
С одной стороны он более гибкий, с другой стороны цикл на дельфи быстрее за счет того, что счетчик классический и переводится напрямую в команды на асме, а если нужна гибкость while ее дает.
@!!ex
> Нормальные программисты не экономят на читабельности ради короткого кода
И поэтому выбирают C++, так как на C++ гораздо проще написать короткий и читабельный код. Пример привёл на предыдущей странице.
Пример на предыдущей страницы НЕ читабелен.
Почему? Потому что для того, чтобы понять что b и с не часть условного выражения - нужно посчитать скобки, в то время как в паскале достаточно найти ключевое слово then. Конкретно в этом примере выражение условное простое и выделить условное выражение легко, в реально жизни примеры сложнее.
Так что это как раз пример худшей читабельности.
UPD:
Кстати, будучи джуниор-джуниором программером в одной большой геймдев конторе одна из моих работ заключалась в том, чтобы подобные выражения приводить в читабельный вид. то есть, внезапно, в больших проектах так не пишут. странно, да, ведь код то компактный и читабельный типа.
@!!ex
Какие скобки?
Это очевидная и легко читаемая для человека конструкция:
if(condition) makeSomething ( );
Это говнокод, за который надо рубить головы:
if condition <> 0 then begin makeSomething (); end;
SNVampyre
Если condition из одного слова - ок, если там пяток выражений уже так очевидно не будет.
Зачем begin end? отличие там на уровне then и сравнением с 0
if condition<>0 then makeSomething();
и как я уже выше написал, then четко отделяет условие от кода.
в куче скобочек понять где-что - сложнее, особенно если кто-то экономит на идентификаторах и называет функции a,b,c
UPD:
Кстати, а чего пример-то сменил? Внезапно оказалось что предыдущий пример хреновый?
@!!ex
> Кстати, а чего пример-то сменил? Внезапно оказалось что предыдущий пример хреновый?
В смысле сменил? Ты про запятые что ли?
Ну да, такой финт ушами в паскале уже не сделать никак:
if(condition) makeSomething1 ( ), makeSomething2 ( );
Паскаль из-за пустых слов превратится как минимум в кашу, так что придётся писать в 4 строки как у убогих программистов, тем самым превратив код в такое месиво, которое вообще невозможно разобрать.
SNVampyre
> В смысле сменил? Ты про запятые что ли?
нет. я вот про это:
if(a) b ( ), c ( );
Реально каша, которую невозможно читать. В которой для понимания где код, а где условие - нужно разобрать выражение.
if condition then begin makeSomething1 (); makeSomething2 ( ); end;
Где здесь каша и что плохо читается?
при этом нет проблем с отделением условия от кода.
Вот begin лишний, это да. Поэтому, к примеру, в Lua его нет и код более гладкий .
if condition then makeSomething1 (); makeSomething2 ( ); end;
SNVampyre
> Паскаль из-за пустых слов
Единственное ненужное слово там begin, остальные как раз улучшают читабельность. Они позволяют быстро просматривать код и обращать внимание на важные участки кода, не останавливаясь на попытках понять где-же кончаются скобочки условия и начинаются скобочки кода.
UPD:
хотя не прав. begin тут не лишний. он лишним становится при использовании else
SNVampyre
>if(condition) makeSomething1 (), makeSomething2 ();
Только периодически некоторые "православные" вместо "," ставят ";" и долго думают опосля. Люди не роботы, ошибки им свойственны, чисто механические, паскаль от откровенно глупых ошибок уберегает, заставляя писать блочно, структурно и формально.
То что некоторым ремесленникам, которые оценивают объем работ по количеству набранного текста, это не нравится, вполне понятно и объяснимо.
Don Nikola
> Только периодически некоторые "православные" вместо "," ставят ";" и долго
> думают опосля.
Кстати да, на автомате, конец выражения, автоматически закрывающий оператор.
по поводу читабельности С++ пока примеры убогие. Уверен что есть нормальные примеры, но их пока не приводили.
@!!ex
> Реально каша, которую невозможно читать. В которой для понимания где код, а где
> условие - нужно разобрать выражение.
Ты реально программист?
Ты что не понимаешь, что это:
if(a) b ( ), c ( );
И это:
if(condition) makeSomething1 ( ), makeSomething2 ( );
- это одно и то же?
@!!ex
> Где здесь каша и что плохо читается?
Тут код вообще нечитаемый. Во-первых, отсутствие скобочек в условии заставляет потратить значительное время чтобы понять, что это за код, и код ли это. Больше похоже на просто текст, будто забыли комментарий поставить. Во-вторых, слова then, begin, end, которые приходится читать вместе с остальным кодом и пытаться отделить синтаксические прибамбасы этого уродского языка от реального кода. Отсутствие запятых в перечислении действий заставляет думать, что это набор каких-то переходов и ветвлений, а после вдумчивого анализа этого бреда понимаешь, что там только одно ветвление. Несоответствие количества зарезервированных слов, точек с запятой и реальных действий. Резервные слова должны показывать какие-то системные действия: выделение переменных, ветвление или управление памятью. Синтаксис должен подчёркиваться знаками препинания, а все остальные слова в тексте - это либо комментарии, либо названия переменных, либо названия функций. Вот это настоящий код, легкочитаемый и удобный.
Don Nikola
> Только периодически некоторые "православные" вместо "," ставят ";" и долго думают опосля.
Только придурок может спутать запятую и точку с запятой. В подсветке синтаксиса знаки препинания всегда выделены другим цветом и по ним чётко видно структуру кода, причём быстро.
SNVampyre
> Ты что не понимаешь, что это:
> if(a) b (), c ();
> И это:
> if(condition) makeSomething1 (), makeSomething2 ();
> - это одно и то же?
Это НЕ одно и тоже.
Первый пример ты привел как удобный для чтения, так вот, он НЕ удобен для чтения.
SNVampyre
> Тут код вообще нечитаемый. Во-первых, отсутствие скобочек в условии заставляет
> потратить значительное время чтобы понять, что это за код, и код ли это.
Это и все остальное действительно верно, но только при одном условии: если нет подсветки синтаксиса.
Я специально в тэг code все определил, с подсветкой читается прекрасно, не нужно тратить время вообще ни на что, все блоки влет распознаются.
А вот это: if(a) b (), c (); что с подсветкой, что без нее читается одинаково хреново.
SNVampyre
> В подсветке синтаксиса знаки препинания всегда выделены другим цветом и по ним
> чётко видно структуру кода, причём быстро.
Я не знаю что у тебя за IDE.
У меня в MSVC2008 выглядит вот так:
if(condition) makeSomething1 ( ), makeSomething2 ( );
SNVampyre
> Только придурок может спутать запятую и точку с запятой.
тут ты прав. При вдумчивом чтении кода. А основную часть кода приходится просматривать выделяя нужные блоки, легко пропустить что знак не тот.
В частности, почему я прицепился к этому примеру:
if(a) b ( ), c ( );
потому что при первом взгляде на этот текст мозг(лично мой, ага) игнорирует закрывающую скобку при а, и воспринимает всю коснтрукцию как целое и только повторное прочтение дает нужный результат. Это отличный пример убогой читаемости.
Время потраченное на рассматривание подсвеченных then begin end - ерунда по сравнению с временем которое нужно потратить для правильного распознавания структуры скобочек. Тут С++ спасает отсутствие необходимости в скобки выделять булевы операции, а то бы вообще крандец был.