Здравствуйте, abibok, Вы писали:
A>Есть стиль как оформление и стиль как способ выразить идею на языке программирования. С недостатками первого можно мириться, но если код написан коряво (функционально коряво, а не пробелы-скобочки), его трудно понимать и поддерживать в будущем, то он должен быть выброшен и переписан.
Сомневаюсь, что у тебя нашлось время вникать в функциональный смысл этого кода. Но все же если ты сделал это, ткни пальцем, дело нескольких секунд, не так ли?
Re[5]: Он думает, что пишет качественный код. Скоро его мнение изменится
Здравствуйте, IT, Вы писали:
IT>Всё зло от пробелов! Tabs rock, spaces suck!
Вот у меня щас на "новом" проекте по "истерическим причинам" в гигаLOC кода уже имеется микс табов и пробелов, при этом таб 8 пробелов а выравнивать надо на 3 (три!) пробела. При этом максимальная длина строки 80 символов.
При этом тотально у всех если не ретиновый макбук то хотя бы два (у некоторых 3 или 4) 24" моника.
Ну вот нахрена?
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[4]: Он думает, что пишет качественный код. Скоро его мнение изменится
Здравствуйте, CompleteBrains, Вы писали:
ГВ>>Зачем нужна struct Pointer? CB>Я ненавижу нижнее подчеркивание
Так сильно что даже кющать не могёшь?
ГВ>>Ещё убери пустые комментарии "Description:", зачем они? Или заполни их содержательным текстом. CB>Чтобы методы визуально отделять друг от друга иначе они сливаю в сплошное мессиво
Вставь просто пустую строку
A>>Syntax.h это вообще жесть, я думал так только индусы могут CB>Why? А то действительно, не понимаю
Это лютый пц, за такое сразу no hire.
Пока поверь на слово — за такое принято бить канделябром.
ioj>>дефайны на стандартные вещи — удел полных *даков CB>Why? Why? Oh God WHY?
Да потому что ты плодишь лишние сущности. Ты ещё for, while, if передефайни. А после этого дай кому нибудь этот "код" почитать и посчитай 'WTF per minute' factor.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[6]: Он думает, что пишет качественный код. Скоро его мнение изменится
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>А что, наконец, делать с битовыми операциями? Они тоже — and/or/xor. Как будешь обозначать? bitand, bitor, bitxor?
and and, or or, xor xor
ГВ>И на сладкое. Например, в boost встречаются методы null(). Догадываешься, какой будет эффект, если попытаться совместить boost с Syntax.h?
Вспоминается #define true false // happy debugging!!!
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[7]: Он думает, что пишет качественный код. Скоро его мнение изменится
Здравствуйте, CompleteBrains, Вы писали:
>>Чувак, по одному твоему посту видно что ты новичок, но я тебя успокою. Видел бы ты код многих сеньйоров. Бейсбольной битой надо бить. CB>Понимаю, но самое плохое в этом то что не полный новичок, жуниор с опытом командной работы. Фиксил код сеньйоров, знаю, видел, полностью согласен
Ну, тогда у тебя всё ещё "спереди". Тебя ещё укусит Александреску, и тебе будет хотеться выть на луну писать ВСЁ на шаблонах и ВСЁ делать параметризуемым ВСЕМ.
Потом ещё помечешься между языками, то один то другой боготворя а затем топя в помоях. Не ты первый, не ты последний в общем.
>>Да, несколько станно было видеть дефайны для стандартных логических операторов. CB>Но ведь есть <ciso646> — это не я придумал. Зато теперь буду знать, что многих напрягает
The tokens were added to the standard in a 1995 amendment to the C90 standard.
Это как диграфы — для совсем бедных.
>>Даже если ты классно решил задачи, то будут придираться к таким мелочам. Сам подумай, кому охота вникать в логику чужого проекта? По одной твоей просьбе и видно что ты новичок. CB>Этот момент я упустил. Я хотел услышать что-то вроде: да твой код понятно смотреть, имена, структура, блоки — все четко и просто. Или наоборот — твой код труднее переварить чем внутреннее устройство STL. А получилось все только по мелочам и синтаксису.
Просто взгляд спотыкается на этих "мелочах" и дальше просто читать не хочется.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[8]: Он думает, что пишет качественный код. Скоро его мнение изменится
Здравствуйте, Олег К., Вы писали:
ОК>Ты не понял. Я имел в виду индентацию кода а не размер мониторов. А может быть и понял но ушел от ответа таким образом.
Ну вот он и говорит что индентация кода слева должна выполняться строго табами.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[10]: Он думает, что пишет качественный код. Скоро его мнение изменится
Здравствуйте, CompleteBrains, Вы писали:
>>Что это за not? Будет ли здесь вызвано неявное приведение типа, возвращаемого Foo к bool? Или к int? Или есть какой-нибудь MySuperBoolean? CB>Возможно, но маловероятно. Серьезно, как надо обкуриться чтобы принять not за класс или еще что-то?
Тебе сказали уже, что в C/C++ существуют 2 операции not — логическая и побитовая.
Вот работал я над проектом, в котором исполняемые модули собирались из исходников на C и Фортране. Причем большую часть времени я возился с Фортраном. У него побитовых операций нет (по крайней мере, тогда не было). Отрицание в нем определено так: .NOT. И хорошо, что в С оно выглядело иначе. Потому что иначе мне пришлось бы каждый раз вспоминать, что это за операция, отвлекаясь, таким образом, от решения основной задачи. Или я пропускал бы эту not автоматом. В последнем случае я мог бы огрести кучу неприятностей.
Или еще вариант: реализуешь ты, к примеру, какой-нибудь функционал для Java с помощью JNI. Синтаксис у C и Java весьма похожи. А если все делаешь в одной и той же среде, скажем, в Eclipse, легко запутаться и начать писать not в Java-коде. А потом недоумевать, почему Eclipse в одних местах на эту not ругается, а в других — нет.
Re[6]: Он думает, что пишет качественный код. Скоро его мнение изменится
Здравствуйте, Vzhyk, Вы писали:
>> Табуляции в форматировании — зло. V>Пробелы в форматировании — зло.
Кстати, как человеку из мира С#, мне интересно, как обстоят дела в С/С++ стане в этом отношении?
Какие настройки использую по умолчанию:
1) Основная среда разработки
2) Тулзы работы с кодом вроде решарпера, которые так и норовят переформатировать код по своему
3) Поставщики генераторов кода для доступа к БД, поставщики контролов и т.п.
Поясню. В С#, к примеру, это
1) VS от 2005 до 2012 — пробелы
2) Resharper — пробелы
3) Внезапно тоже пробелы
Перенастраивать весь этот зоопарк — то еще удовольствие, да и вообще на уровне сизифова труда.
Все равно вылезут потом то тут, то там пробелы посреди табов и получится бардак.
Приходится диагностировать некоторым архитекторам заказчиков неопасный симптом "табуляции головного мозга". Как правило для дотнетчика это признак более серьезных заболеваний вроде "серебряная пуля головного мозга" и "не барское это дело — код писать".
Re[30]: Он думает, что пишет качественный код. Скоро его мнение изменится
Здравствуйте, CompleteBrains, Вы писали:
>>Это потому, что когда C++-программист будет читать твой код и увидит "and", "not", "or" CB>Спасибо за подробный ответ. Но есть замечания. Вспомним еретический <ciso646>, даже заглянем в него. И опа, кажется индусы завелись в стандарте.
Да нет, это не индусы завелись в стандарте. Это в стародавние времена были некоторые сложности с кодировкой и ради совместимости пришлось вводить такие переобозначения, CreatorCray как раз правильно вспомнил про диграфы (кстати, ещё есть и триграфы). То есть это не украшение синтаксиса, а решение насущной проблемы.
CB>В общем теперь, все эти вопли и сморщенные носики касательно синтаксиса кажутся немного преувеличенными.
Отнюдь. Если бы ты включил iso646.h и сказал, что программа предназначена для компиляции разными компиляторами, в том числе каким-нибудь древнейшим C++, а просматривать ты её собираешься на терминале с 7-битным знакогенератором — отношение было бы совсем другое. А когда отовсюду торчат уши DirectX и C++11...
CB>Хотя не буду спорить, херить стандартный синтаксис не хорошо, но блин, он ведь иногда такой уродливый.
Дело вот в чём. Как правило, кодом не любуются — его читают ради того, чтобы в нём что-то поправить или разобраться, как он работает. В другое время код попросту никому не нужен — работает, и славно. Представь, что ты работаешь с проектом, ну, скажем, всего в 2-3 МБ исходников. Будешь ты им любоваться? Если да, то всем кодом сразу или по частям?
Поэтому главная задача, которой должно быть подчинено эстетическое оформление — помочь читать код. Поэтому чем он проще, чем меньше в нём отсылок во все стороны (в том числе и по F12) — тем лучше.
CB>По поводу страданий кодера который увидит в коде and or not — макросы от остального отличаются цветом шрифта (не в notepad ведь код пишем) и всегда есть подсказки плюс хоткей чтобы за секунду ознакомиться с макросом.
Любопытная смесь рассуждений XXI века и отсылок к iso646 Ну то есть, да, конечно, можно всегда нажать F12 — только чем меньше приходится это делать, тем лучше.
>>И на сладкое. Например, в boost встречаются методы null(). Догадываешься, какой будет эффект, если попытаться совместить boost с Syntax.h? CB>Согласен, не знал. Но у меня уже были подобные конфликты имен, тут все сразу понятно. Жмем Rename в VAX и все ссылки в коде исправлены. Ерунда
Ты собираешься исправлять boost по такому пустяковому поводу?
>>А просто разделители без текстов поставить — нет? CB>Я пробовал. Нет, все равно сливается в кашу
Ну OK, спишем на эстетство автора. В конце концов, это можно обозвать placeholder-ами. Вообще, по поводу комментариев я бы тебе посоветовал посмотреть на Doxygen. Не то, чтобы это было требованием, но кое-какая реальная польза от него случается.
>>Потому что не надо пытаться делать из C++ другой язык программирования с другим синтаксисом CB>Синтаксический сахар не делает из C++ другой язык
Чтобы не впадать в очередную серию холиваров — да, согласен. Но всё равно такие изыски смотрятся, уж извини, наивно. Такой стиль свойственен новичкам не только по отношению к C++. Приведу аналогию из мира Lisp: чуть не каждый новый лиспер первым делом бросается изобретать Lisp без скобок.
>>Что это за not? Будет ли здесь вызвано неявное приведение типа, возвращаемого Foo к bool? Или к int? Или есть какой-нибудь MySuperBoolean? CB>Возможно, но маловероятно. Серьезно, как надо обкуриться чтобы принять not за класс или еще что-то?
Ха!
class Invertor
{
public:
Invertor(){}
template<typename T>
inline bool operator &= (T val) const
{
Log("Inversion operator");
return !val;
}
};
#define not Invertor() &=
bool value = not otherValue;
Макросы — они такие макросы...
>>Ты в курсе о погрешностях вычислений с плавающей точкой? CB>Да конечно в курсе и мне еще предстоит детально в этом разобраться, а то немного мутновато. Ну а пока, тот код относился к вращению камеры в пространстве, если б было фатально, я б сразу заметил.
Ну, хорошо.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[8]: Он думает, что пишет качественный код. Скоро его мнение изменится
>>>Чувак, по одному твоему посту видно что ты новичок, но я тебя успокою. Видел бы ты код многих сеньйоров. Бейсбольной битой надо бить. CB>>Понимаю, но самое плохое в этом то что не полный новичок, жуниор с опытом командной работы. Фиксил код сеньйоров, знаю, видел, полностью согласен CC>Ну, тогда у тебя всё ещё "спереди". Тебя ещё укусит Александреску, и тебе будет хотеться выть на луну писать ВСЁ на шаблонах и ВСЁ делать параметризуемым ВСЕМ.
Скорее всего не будет. Видно ведь что понимает что не нужно это!
>>>Даже если ты классно решил задачи, то будут придираться к таким мелочам. Сам подумай, кому охота вникать в логику чужого проекта? По одной твоей просьбе и видно что ты новичок. CB>>Этот момент я упустил. Я хотел услышать что-то вроде: да твой код понятно смотреть, имена, структура, блоки — все четко и просто. Или наоборот — твой код труднее переварить чем внутреннее устройство STL. А получилось все только по мелочам и синтаксису. CC>Просто взгляд спотыкается на этих "мелочах" и дальше просто читать не хочется.
Да даже если бы мелочей таких не было, никто бы не стал вникать в логику или как все классно разбито на модули/классы/функции. Поэтому только и остаются такие придирки к мелочам.
Re[9]: Он думает, что пишет качественный код. Скоро его мнение изменится
ОК>>Ты не понял. Я имел в виду индентацию кода а не размер мониторов. А может быть и понял но ушел от ответа таким образом. CC>Ну вот он и говорит что индентация кода слева должна выполняться строго табами.
Должна, должна... Кому она что должна?
З.Ы. Чтобы тут не говорилось, но факт остается фактом. Везде где я был видел дикую смесь табов и пробелов.
Re[9]: Он думает, что пишет качественный код. Скоро его мнение изменится
IT>>>4 и фиг его знает. ОК>>У меня восемь. Вложенностей от начала строки 3-4, максимум пять. Весь код посередине экрана. Нет нагромождения слева и нет кучи свободного места справа и, как бонус, сразу виднее что чему подчиняется.
IT>Восемь для меня не удобно.
Для меня было тоже вначале непривычно а потом понял что это классно. Плюсы я уже перечислил.
IT>>>Всё зло от пробелов! Tabs rock, spaces suck! ОК>>Пробелы по этой причине предлагаю отменить! Используй только табы! Вообще, вырви ты эту клавишу из клавиатуры.
IT>Вырви лучше себе таб. А пробелы мне нужны, например, для табличного форматирования.
А я почему должен вырывать? Я табы заменяю при сохранении на спейсы и тебе который раз говорю что без табов ты прожить сможешь, а вот без спейсов нет.
Re[10]: Он думает, что пишет качественный код. Скоро его мнение изменится
IT>>Восемь для меня не удобно.
A>Восемь превращается в тряпки на экране уже при минимальной вложенности. Неудобно.
A>
A>class ForEachTest
A>{
A> static void Main(string[] args)
A> {
A> int[] fibarray = new int[] { 0, 1, 2, 3, 5, 8, 13 };
A> foreach (int i in fibarray)
A> {
A> if (i % 2 === )
A> {
A> Console.WriteLine("a");
A> }
A> else
A> {
A> Console.WriteLine("b");
A> }
A> }
A> }
A>}
A>
Не вижу тряпок но советую посмотреть где у тебя в основном код концентрируется на экране. Скорее всего в левой части в то время как в правой части куча свободного пространства.
Но таки да, я с тобой согласен что потому что методы в Шарпе должны быть определены в классе, это создает дополнительный уровень индентации. Оберни это в неймспейс — еще один уровень. Таков язык и именно из-за самого языка люди ставят табы в четыре спейса.
Но есть ведь еще Си, Ассемблер, Сиквел, Перл и шеллы. Для них тэб в восемь спейсов просто идеален.
Re[21]: Он думает, что пишет качественный код. Скоро его мнение изменится
IT>>>Давай. От ведущих. ОК>>Все или ничего!
IT>Тогда предложи отменить то или иное прямо в OS или даже в железе.
Предложил тебе ниже вырвать пробел из клавиатуры. Дело за тобой.
IT>>>Так всё дело в этом, а не в табах. ОК>>Повторюсь, табы создали только лишние проблемы.
IT>Никаких проблем они не создают. В отличие от пробелов.
Повторюсь еще раз. Без тэбов ты проживешь, без пробелов — нет.
IT>>>Мне он не нравится. Значит для меня плохой. ОК>>Ну а кому-то нравится. Кто из вас прав?
IT>Никто или оба. Потому что мы говорим о предпочтениях.
ОК>>Мне лично все равно до стиля.
IT>А зачем ты его тут тогда привёл в качестве аргумента.
Мы начинаем повторяться. Я тебе выше уже говорил что привел пример стиля который существует и который ломает твою догму с табами.
ОК>>Ну разумеется мы все следуем чему-то "свыше." Дома мне нравится делать по-своему, на работе я отключаюсь от этого. Пойнт тут в том что я могу следовать чужим "предпочтениям" а не просто кричать код г, кругом табы а не спейсы и не наоборот.
IT>Следовать за стадом — дело как раз не хитрое. Убеждать людей и ломать устаревшие предпочтения гораздо трудней и интересней.
Тут не следование за стадом а умение отключить свои предпочтения а работать в рамках существующего кода.