
Aragaer
19.05.2016
17:27:42
это я сегодня видел строчки:
char *filename;
*this >> &filename;

Aldar
19.05.2016
17:27:47
в С++ можно переопределять операторы
поэтому говнокод на С++ это ядерные отходы, опасные для жизни

Aragaer
19.05.2016
17:28:04
пришлось перекопать 6 классов, чтобы найти, в каком переопределен >> и что он делает

Google

[Anonymous]
19.05.2016
17:29:30
Что он делал?

Suigintou45
19.05.2016
17:30:03

Aragaer
19.05.2016
17:32:26
вобщем оказалось, что в этом классе, унаследованное откуда-то за 2-3 родителя до этого, имеется массив char *, в котором содержится несколько строк, разделенных \0. И еще есть поле, указывающее на "текущее" смещение от начала этого массива. Соответственно оператор >> присваивает в аргумент массив+текущее смещение, а потом сдвигает то поле на strlen от текущего

Aleserche
19.05.2016
17:32:37
потом приходит мидл на кресты и его садят на полгода сопровождать легаси...

Suigintou45
19.05.2016
17:33:44

Aragaer
19.05.2016
17:33:53
я пришел на собеседование как программер на С и в меньшей степени С++, а на собеседовании выяснилось, что им срочно нужен человек, который знает гит, баш, мэйк, может поднять им дженкинс и вообще следить за дейли билдами и релизами
не, сишники на плюсах такое бы писать не стали. Зачем переопределять оператор, если можно просто сделать метод
а как вам оттуда же некий класс, у которого все поля и методы статические?

Suigintou45
19.05.2016
17:35:00
шаблоны-контейнерчики

Aragaer
19.05.2016
17:35:02
аффтар не умеет в неймспейсы7

Suigintou45
19.05.2016
17:35:28
и вообще, зачем вспоминать о strlen, когда всюду unicode...

Aragaer
19.05.2016
17:35:34
хотя как я уже тут неоднократно говорил, автор того кода явно в детстве был покусан оператором for

Google

Aragaer
19.05.2016
17:35:38
не, там аски
у этого автора нигде и никогда нет for

Aleserche
19.05.2016
17:35:57
и вчары кругом
страшно

Aragaer
19.05.2016
17:36:16
всегда
int i = MAX_COUNT;
while (i--) {
}

Aleserche
19.05.2016
17:36:32
он же быстрее

Aragaer
19.05.2016
17:36:46
впрочем это еще ок, тут хотя бы декремент в условие убран. А когда он отдельно - это более частая ситуация
std::vector<some_type *>::iterator it = my_vector.begin();
while (it != my_vector.end()) {
++it;
}
или как там эта стл хреновня пишется

Aldar
19.05.2016
17:39:33
обычно такое через range based for пишут

Aragaer
19.05.2016
17:39:47
у этого автора нигде и никогда нет for
хотя вот сегодня коллега сказал, что while у него там не самое частое. do-while чаще

Aldar
19.05.2016
17:40:39
аффтар жжот значит

Aragaer
19.05.2016
17:41:15
коллега сегодня высказал то, о чем я давно подозревал. Теперь мы сходимся во мнении, что аффтар кодил под веществами

Aleserche
19.05.2016
17:41:52
с этого и надо было начинать

Aragaer
19.05.2016
17:42:23
ну я как бы там уже давно говорю - надо просто брать куски и переписывать, чтобы было по крайней мере понятно
из другого того же автора кстати:
some_type *item = new some_type;
item->field1 = value1;
item->field2 = value2;
item->field3 = value3;
item->field4 = value4;
написать конструктор с параметрами автор тоже не умеет
тут я куски кода показываю, но реально там беда не в коде, а в архитектуре
зачем такое было городить мне пока еще никто не может ответить

Google

Aleserche
19.05.2016
17:45:12
а что за система?

Aragaer
19.05.2016
17:45:24
в одном месте был aio_write операций, который при нормальной загрузке затыкался и вешался. Мы просто сделали write и все зашуршало
да у нас на работе
задачи казалось бы простые

Aleserche
19.05.2016
17:45:56
просто так обычно пишут одноразовые системы

Aldar
19.05.2016
17:46:11
это ещё не совсем говнокод

Aragaer
19.05.2016
17:46:33
читай из файлового дескриптора, формируй строки, пиши в файлы. Нет. Два треда, в одном чтение и запись. В другом пул файловых операций. Файловые операции это 20 классов коллбэков

Aldar
19.05.2016
17:46:49
вот когда наследуют одну структуру от другой, причём они без методов

Aragaer
19.05.2016
17:46:54
и ты сидишь и 3 часа вкуриваешь, чтобы понять, а где тут вообще открытие файлов происходит

Aldar
19.05.2016
17:46:57
и добавляют туда парочку полей
или оставляют кучу закомментированного кода, либо
if(false) { простыня кода }

Aragaer
19.05.2016
17:47:35
это норма

Aleserche
19.05.2016
17:47:38
что-то мне поплохело от таких расказов

Aldar
19.05.2016
17:47:41
вот это я понимаю говнокод

Aragaer
19.05.2016
17:47:49
а, да, последний на сегодня перл от опять же того же автора

Aldar
19.05.2016
17:48:00
класс на 1000 строк, тоже ок

Aragaer
19.05.2016
17:48:04
тулза по имени xmlproc. В теории парсит xml файлы
весь исходник это 200 строк кода, из которых наверно половина пустые или комментарии, от оставшегося треть это фигурные скобки
и к нему в довесок 500 мегабайт буст

Aleserche
19.05.2016
17:49:11

Google

Petr
19.05.2016
17:49:39
жесть

Aragaer
19.05.2016
17:50:19
в сорцах самсунго андроида я видел - главный класс приложения Camera. 23 тысячи строк. Под сотню иннер классов, по несколько сотен полей и методов
и рядом еще второй, который экстендит первый и .. все

Aleserche
19.05.2016
17:50:45
сегодня класс разгребал на 700 строк. Не много. Но это класс чего только не делает.

Petr
19.05.2016
17:50:54

Aragaer
19.05.2016
17:50:56
class OtherClass extends FirstClass {}
я тут для себя решил придерживаться правила, которое где-то видел

Aleserche
19.05.2016
17:51:23
ентерпрайзненько

Admin
ERROR: S client not available

Aragaer
19.05.2016
17:51:33
если в файле больше 200 строк, значит он слишком многое делает

Aleserche
19.05.2016
17:52:04
это в книгах пишут. Принцип единственной ответственности или как его там

Arseny
19.05.2016
17:52:08
в файле или в классе все-таки?

Игорь
19.05.2016
17:52:13

Aragaer
19.05.2016
17:52:29
когда на майских для работы кодил одну штуку, получился у меня один файлик, который был 210-220 строк примерно. И никак не удавалось его отрефакторить меньше

Aleserche
19.05.2016
17:52:37
за несколько классов в одном файле бить по рукам надо

Игорь
19.05.2016
17:52:54
Если в методе больше 2к строк, значит он великоват

Aragaer
19.05.2016
17:52:58
а потом я просто выделил оттуда функциональность в виде вспомогательного класса и вынес оттуда в другой файл. И стало 40 и 170

Arseny
19.05.2016
17:53:16

Aragaer
19.05.2016
17:53:24
а потом эта функциональность в другом месте пригодилась к тому же
ну и кстати, в тему программирования на С

Google

Aragaer
19.05.2016
17:54:15
http://www.jera.com/techinfo/jtns/jtn002.html

Aleserche
19.05.2016
17:54:31

Aragaer
19.05.2016
17:54:34
фреймворк для юнит тестов на С в 3 строки

Alex
19.05.2016
17:54:48

Aragaer
19.05.2016
17:55:41
у меня пока так получается - я пишу на чистом С, а потом появляются структуры, чтобы таскать пачки аргументов. А потом оно начинает выглядеть как методы.

Aldar
19.05.2016
17:56:01
ООП нинужон в хаскелле

Alex
19.05.2016
17:56:03
после С хорошо бы еще фп качнуть, и тогда ты дзен кодер

Aragaer
19.05.2016
17:56:20
и я просто меняю расширение файла (все продолжает работать), а потом начинаю превращать в плюсы

Aldar
19.05.2016
17:56:33
категоричненько насчёт нигде не нужен

Aleserche
19.05.2016
17:56:34

Aragaer
19.05.2016
17:56:36
да, фп надо качнуть. Я хаскелл все никак не осилю. Уже несколько лет
ооп появился в смаллтолке
причем..

Alex
19.05.2016
17:57:05

Aragaer
19.05.2016
17:57:14
Actually I made up the term "object-oriented", and I can tell you I did not have C++ in mind.

Alex
19.05.2016
17:57:19

Aldar
19.05.2016
17:57:32
а вы помните солид принципы?

Aragaer
19.05.2016
17:57:40
да у меня sicp открыт

Aleserche
19.05.2016
17:57:41
да, но не всегда соблюдаю. Ибо порой бывает так лень. Или вокруг уже такой мрак, что никакой подорожник не поможет

Aragaer
19.05.2016
17:57:46
но я все туда не смотрю