Ну минусы все отписали. Переработанная версия должна быть уже почти идеал ))
По мне — для начала нормуль. Я б тебя в команду взял, я не сноб )
Основной плюс — разобраться и переписать этот код будет не слишком сложно. Так же импонирует подход к проработке, вектор, так сказать.
Re[2]: Он думает, что пишет качественный код. Скоро его мнение изменится
Здравствуйте, ioj, Вы писали: ioj>т.к. налицо ООП головного мозга и возраст автора < 20 лет.
где ты там ООП увидел? Там типичный структурный подход, но функции хаотично обьеденены в несколько классов. Возможно он перепутал кейворды namespace и class и хотел лишь по неймспесам разбить их.
Re[2]: Он думает, что пишет качественный код. Скоро его мнение изменится
On 29.04.2013 21:20, Геннадий Васильев wrote:
> Так... Пустые методы — зачем растаскивать скобки на несколько строк?
Что за фантазии. Наоборот читать легче.
> using namespace std — то есть, то нет.
Лучше вообще не использовать это.
> Табуляции в форматировании — зло.
Пробелы в форматировании — зло.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: Он думает, что пишет качественный код. Скоро его мнение изменится
Здравствуйте, _Obelisk_, Вы писали:
_O_>А смысл ? Код должен решать задачу, допускать расширение в разумных пределах и его можно было бы саппортить. Зачем его в рамочку ставить ?
Задачи бывают разные. Например — обучение. Как надо и как не надо делать.
Течёт вода Кубань-реки куда велят большевики.
Re[3]: Он думает, что пишет качественный код. Скоро его мнение изменится
Здравствуйте, tpascal, Вы писали:
T> Забей, "идеальный код" — понятие очень субьективное. T> Как бы тут его не вылизывали, интервьювер всеравно найдет кчему докапаться.
давайте определим "идеальный код" как "код, который нельзя улучшить", т.е. к нему ни прибавить, ни отнять. а субъективность в стиле "табуляция вместо пробелов" легко устраняется гайдлайнами по стилю. кстати, если смесь табуляций с пробелам сохраняет форматирование и структура не разваливается при любом значении табуляции от 1 до ... (ну пускай будет до 79), то проблемы нету.
ЗЫ. тут другая собака повалялась. а именно -- длина строк. сейчас практически у всех широкоугольные мониторы и потому ограничение в 80 символов на строку (а оно есть во многих гайдлайнах по стилю) выглядит издевательством. с другой стороны, если ему следовать, то на широкоугольном мониторе можно открыть три листинга по вертикали.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re: Он думает, что пишет качественный код. Скоро его мнение изменится
CB>Итак, налетай народ, валим нуба!
вопрос -- зачем передавать windowHandler как аргумент в Input.cpp? храните это внутри экземпляра класса, а присваивайте при инициализации.
это ужос. делайте #if 0 или #ifdef (_something_).
в этом случае IDE посвечивает "выключенный" код, а ifdef легко "включить" одним движением. а ваши комментарии -- после того как вы их раскоментируете, вы забудете как и что закомментировать обратно.
ЗЫ. тренируйтесь в написании кода на бумаге. в несложных задачках, которые влезают в полсотни строк. так быстрее добиться "просветления".
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[4]: Он думает, что пишет качественный код. Скоро его мнение изменится
Здравствуйте, мыщъх, Вы писали:
М>Здравствуйте, tpascal, Вы писали:
T>> Забей, "идеальный код" — понятие очень субьективное. T>> Как бы тут его не вылизывали, интервьювер всеравно найдет кчему докапаться. М>давайте определим "идеальный код" как "код, который нельзя улучшить", т.е. к нему ни прибавить, ни отнять.
Вне контекста задачи это определение бессмысленно.
М>ЗЫ. тут другая собака повалялась. а именно -- длина строк. сейчас практически у всех широкоугольные мониторы и потому ограничение в 80 символов на строку (а оно есть во многих гайдлайнах по стилю) выглядит издевательством. с другой стороны, если ему следовать, то на широкоугольном мониторе можно открыть три листинга по вертикали.
длинные строки в программах плохи по той же причине, по какой плохи длинные строки в тексте.
Плюс иногда приходится еще на терминале просматривать/патчить сорцы, а распахивать терминал на весь экран — это извращение.
Да, блин, вы меня размазали, мокрого места не оставили и моя самооценка теперь в несколько раз ниже. Но я вас все равно обожаю и не забуду, так что не парьтесь.
А теперь переходим к сути:
ГВ>Зачем нужна struct Pointer?
Я ненавижу нижнее подчеркивание
ГВ>/* За такие вещи полагается месяц читать Страуструпа вслух по пять часов в день. */
Это потому что везде где встречается например not (DontKillMe()) будет замена символов? А еще причины есть?
ГВ>Ещё убери пустые комментарии "Description:", зачем они? Или заполни их содержательным текстом.
Чтобы методы визуально отделять друг от друга иначе они сливаю в сплошное мессиво
A>С++ там и рядом не лежал, ни С++11, ни вообще С++
Я как-то не врубаюсь. Что значит «С++ там и рядом не лежал»? То есть что нужно сделать чтобы он там появился? В двух словах, мне хватит
A>синглтоны глаза режут
Хреновые конкретно мои синглтоны или вообще?
A>Syntax.h это вообще жесть, я думал так только индусы могут
Why? А то действительно, не понимаю
TSP>А во вторых голая баба в комментах только время сборки увеличивает.
Я думал на комменты компилятору положить, ошибся?
8>а еще полно тупых комментов, типа:
Отмазка: иногда такие нужны чтобы быстро понять, что тут делается не вникая в код
ioj>дефайны на стандартные вещи — удел полных *даков
Why? Why? Oh God WHY?
ioj>геттеры/сеттеры для полей, изменение которых не нарушает контракт интерфеса — удел полных *даков
Я нихрена не понял. Зачем проектировать интерфейс а потом его нарушать своими же методами?
ioj>использование в хидерах типов, которые подключаются неявно
Да, это отстой. Но у меня возникла проблема когда я попытался найти это в коде. Требуется помощь
ioj> т.к. налицо ООП головного мозга и возраст автора < 20 лет.
В смысле я не врубаюсь в ООП совсем? Что совсем, совсем? И да, мне 12 лет
A>Походил по папкам, почитал исходники. Этот код smells.
Конкретика. Конкретика, блин. Конкретика это одно из величайший изобретений человечества, пользуйтесь им.
T>где ты там ООП увидел? Там типичный структурный подход, но функции хаотично обьеденены в несколько классов
Конкретные примеры, пару штук, я ведь прошу так мало
Что-то не то. Вы все к деталям придираетесь, к в вопросам касательно вкусов, как будто там не нет более существенных косяков. Короче никакое не мясо, а так, щеночки сосиску покусали. И да, очень недостает аргументов на конкретных примерах. Вас что, никто критике не учил?
Re[4]: Он думает, что пишет качественный код. Скоро его мнение изменится
Здравствуйте, CompleteBrains, Вы писали:
CB>Что-то не то. Вы все к деталям придираетесь, к в вопросам касательно вкусов, как будто там не нет более существенных косяков. Короче никакое не мясо, а так, щеночки сосиску покусали. И да, очень недостает аргументов на конкретных примерах. Вас что, никто критике не учил?
лично мне откровенно лень объяснять, не потому что долго или что-то, а потому что бесполезно. Чтобы тебе начать понимать некоторые простые вещи ( типа *удацких дефайнов ) тебе необходимо хоть раз поработать в команде С++ разработчиков хотя бы месяц, более сложные вещи ( вроде ненужности геттеров/сеттеров, синглтонов и прочего ) нужно поработать более продолжительное время, написать для начала тысяч сто строк на С++, и тогда придёт понимание. Пока же тебе что-либо объяснять бессмысленно, как бессмысленно объяснять новичку зачем нужно программу разбивать на функции, а не писать всё сразу в main. И да, не нужно отвечать "ну вы ответьте всё равно, я пойму", я вижу как и что ты отвечаешь на уже существующие замечания, и это лишний раз подтверждает что не в коня корм.
нормально делай — нормально будет
Re[2]: Он думает, что пишет качественный код. Скоро его мнение изменится
Здравствуйте, ioj, Вы писали:
ioj>нубас, смари, кароч, первое чо те надо уяснить:
RTFM — правила форума
ioj>дефайны на стандартные вещи — удел полных *даков
+1 ioj>statefull синглтоны — удел полных *даков
Тут вопрос. Скажем стандартный ввод/вывод сделан на глобальных переменных, причем не только в С++, но и в том же питоне. Аналогичная ситуация с логированием.
ioj>геттеры/сеттеры для полей, изменение которых не нарушает контракт интерфеса — удел полных *даков
тут тоже вопрос. Лично я обычно или делаю структуру, в которой все поля открыты (и возможно есть несколько методов для удобства) или класс, в котором все поля закрыты...
ioj>использование в хидерах типов, которые подключаются неявно, как следствие важна очерёдность подключения хидеров в cpp — удел полных *даков
+1
ioj>а я ведь только 2 минуты поглядел
а я вообще не глядел, лениво
Re[6]: Он думает, что пишет качественный код. Скоро его мнение изменится
Здравствуйте, ioj, Вы писали:
ioj>Здравствуйте, CompleteBrains, Вы писали:
CB>>Что-то не то. Вы все к деталям придираетесь, к в вопросам касательно вкусов, как будто там не нет более существенных косяков. Короче никакое не мясо, а так, щеночки сосиску покусали. И да, очень недостает аргументов на конкретных примерах. Вас что, никто критике не учил?
ioj>лично мне откровенно лень объяснять, не потому что долго или что-то, а потому что бесполезно. Чтобы тебе начать понимать некоторые простые вещи ( типа *удацких дефайнов ) тебе необходимо хоть раз поработать в команде С++ разработчиков хотя бы месяц, более сложные вещи ( вроде ненужности геттеров/сеттеров, синглтонов и прочего ) нужно поработать более продолжительное время, написать для начала тысяч сто строк на С++, и тогда придёт понимание. Пока же тебе что-либо объяснять бессмысленно, как бессмысленно объяснять новичку зачем нужно программу разбивать на функции, а не писать всё сразу в main. И да, не нужно отвечать "ну вы ответьте всё равно, я пойму", я вижу как и что ты отвечаешь на уже существующие замечания, и это лишний раз подтверждает что не в коня корм.
Ну да конечно, тебе лень объяснять, зато писать «отстой» и отмазки на полстраницы тебе не лень. Все эта туфта про бессмысленно и бесполезно – классический съезд когда сказал что-то не подумав а тебя подловили на этом. Ты кое в чем прав, но всем на это положить пока не докажешь свою правоту. Короче, школьник и то, выкрутился бы посолидней.
Re[2]: Он думает, что пишет качественный код. Скоро его мнение изменится
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>В хидерах что-то мрачное, намекающее на необходимость отлучения автора от клавиатуры (мои комментарии в: /* */):
ГВ>
ГВ>/* За такие вещи полагается месяц читать Страуструпа вслух по пять часов в день. */
ГВ>// Logic symbols
ГВ>#define equals ==
ГВ>#define not !
ГВ>#define notequal !=
ГВ>#define and &&
ГВ>#define or ||
ГВ>
Здравствуйте, CompleteBrains, Вы писали:
CB>Да, блин, вы меня размазали, мокрого места не оставили и моя самооценка теперь в несколько раз ниже. Но я вас все равно обожаю и не забуду, так что не парьтесь.
CB>В смысле я не врубаюсь в ООП совсем? Что совсем, совсем? И да, мне 12 лет
Слушай, если тебе действительно 12 лет, тебе нужно в футбол играть и математику учить.
Программирование — это для мальчиков постарше. Лет с 14 можно начинать.
Когда мне было 12 лет, компьютерами были ЕС-ки и основным языком Фортран-4.
Вот как ты думаешь, пригодилось бы оно мне?
Течёт вода Кубань-реки куда велят большевики.
Re[5]: Он думает, что пишет качественный код. Скоро его мнение изменится
Ой, как всё запущено-то...
ГВ>>Зачем нужна struct Pointer? CB>Я ненавижу нижнее подчеркивание
На здоровье! Но когда ты передашь свой код кому-то ещё, он вынужден будет заново уяснять, как обозначены указатели. И фиг бы с ним, но ты же ещё раскидал копии этой структуры по разным хидерам — это-то нафига делать?
ГВ>>/* За такие вещи полагается месяц читать Страуструпа вслух по пять часов в день. */ CB>Это потому что везде где встречается например not (DontKillMe()) будет замена символов? А еще причины есть?
Это потому, что когда C++-программист будет читать твой код и увидит "and", "not", "or", первое, что он подумает, что это переменная или какое-то специфическое служебное слово из последних изысков. А вдруг это вообще — название класса? А если это макро, то какие у него побочные эффекты? Чтобы ответить на эти вопросы ему придётся копаться в хидерах, хотя этого можно было бы и избежать. Ровно то же самое относится к null и Space/Tab/Endl.
А что, наконец, делать с битовыми операциями? Они тоже — and/or/xor. Как будешь обозначать? bitand, bitor, bitxor?
Потом, тебе нравится "and" (строчные буквы), а кому-то, положим, нравится "AND" (прописные буквы). Вы сделаете два Syntax.h...
И на сладкое. Например, в boost встречаются методы null(). Догадываешься, какой будет эффект, если попытаться совместить boost с Syntax.h?
ГВ>>Ещё убери пустые комментарии "Description:", зачем они? Или заполни их содержательным текстом. CB>Чтобы методы визуально отделять друг от друга иначе они сливаю в сплошное мессиво
А просто разделители без текстов поставить — нет? Текст пишут для того, чтобы его читали, либо не пишут вообще. Если читать в комментарии нечего — нарисуй вместо него линию.
A>>Syntax.h это вообще жесть, я думал так только индусы могут CB>Why? А то действительно, не понимаю
Потому что не надо пытаться делать из C++ другой язык программирования с другим синтаксисом. Если тебе нужен другой язык — возьми этот самый другой язык и успокойся.
8>>а еще полно тупых комментов, типа: CB>Отмазка: иногда такие нужны чтобы быстро понять, что тут делается не вникая в код
Вот как раз поэтому я и сказал тебе, что не надо пытаться под кого-то косить. Программист с приличным опытом не нуждается в бессодержательных комментариях, потому что привык читать код.
ioj>>дефайны на стандартные вещи — удел полных *даков CB>Why? Why? Oh God WHY?
Потому что к стандартным вещам все уже привыкли и вот такая запись не вызывает вопросов:
if (!Foo()) {...}
а вот такая заставляет задумываться, о чём она, вообще:
if (not Foo()) {...}
Что это за not? Будет ли здесь вызвано неявное приведение типа, возвращаемого Foo к bool? Или к int? Или есть какой-нибудь MySuperBoolean?
ioj>>использование в хидерах типов, которые подключаются неявно CB>Да, это отстой. Но у меня возникла проблема когда я попытался найти это в коде. Требуется помощь
По видимому имеются в виду типы вроде Vector и Matrix. Кстати говоря, я тоже не понял, зачем ты ввёл эти переопределения. Но ioj тут лучше ответит.
CB>Что-то не то. Вы все к деталям придираетесь, к в вопросам касательно вкусов, как будто там не нет более существенных косяков. Короче никакое не мясо, а так, щеночки сосиску покусали. И да, очень недостает аргументов на конкретных примерах. Вас что, никто критике не учил?
Не знаю, кому как, но мне стало безразлично, что у тебя там за суть, после того, как я увидел вакханалию очередного улучшения языка. Автор явно сосредоточен не на том, на чём следовало бы.
Вот ещё прекрасное (не помню уже, где именно, а код ты убрал):
if (x) { ... } // x - число с плавающей точкой
Ты в курсе о погрешностях вычислений с плавающей точкой?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[3]: Он думает, что пишет качественный код. Скоро его мнение изменится
Здравствуйте, Vzhyk, Вы писали:
>> Так... Пустые методы — зачем растаскивать скобки на несколько строк? V>Что за фантазии. Наоборот читать легче.
Зато кататься по тексту — дольше. В прочем, это не особо важный момент.
>> using namespace std — то есть, то нет. V>Лучше вообще не использовать это.
Иногда using namespace std приносит пользу, но лучше не смешивать в одном блоке std:: и using namespace std.
>> Табуляции в форматировании — зло. V>Пробелы в форматировании — зло.
Хорошо, хорошо, уговорили. В конце концов, пробелы и табуляции — наименьшее из зол.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[4]: Он думает, что пишет качественный код. Скоро его мнение изменится
On 30.04.2013 16:58, Геннадий Васильев wrote:
> Зато кататься по тексту — дольше. В прочем, это не особо важный момент.
На мышке есть нынче очень приятное колесико.
> Иногда using namespace std приносит пользу, но лучше не смешивать в > одном блоке std:: и using namespace std.
А потом какой "самородок" внезапно совтсвенный велосипед строк
присобачит, или такой велосипед уже с незапамятных времен, где
паралельно в проекте живет и с ним ты просто не пересекся. Зато баги
потом после ловить очень весело.
Posted via RSDN NNTP Server 2.1 beta
Re[7]: Он думает, что пишет качественный код. Скоро его мнение изменится
Здравствуйте, CompleteBrains, Вы писали:
CB>Ну да конечно, тебе лень объяснять, зато писать «отстой» и отмазки на полстраницы тебе не лень.
Это тебя абсолютно не касается. Критик сказал "лень" — значит, ему лень. Скажи спасибо, что тебе вообще ответили — будешь много выступать, будут вообще игнорировать.
CB>Все эта туфта про бессмысленно и бесполезно – классический съезд когда сказал что-то не подумав а тебя подловили на этом.
Это ты про себя?
Короче никакое не мясо, а так, щеночки сосиску покусали.
CB>Ты кое в чем прав, но всем на это положить пока не докажешь свою правоту. Короче, школьник и то, выкрутился бы посолидней.
Трудно сказать, психологию школьников мы тут уже, как-то, подзабыли.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!