- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
for (int z=NewArray[y-1];z<(NewArray[y]-1);z++)
{
AnsiString ts = IntToStr(z+1);
int inum = -1;
try{
inum = StrToInt(ts);
} catch(...) {}
..... //дальше inum не используется
}
на уймись уже
по теме - если создавать С++ библиотеку общего назначения да еще и на все случаи жизни, совместимую с паскалём 20-летней давности, получается беспредельное говнище, позорящее С++ своим существованием
инвалидизация программистов хуже бейсика, спасибо борланду
То можно за время её написания отрастить бороду.
дважды перепродаться, чтобы хоть как то свести концы с концами
Меня забавляет, как проходящая мимо крестошколота минусует положительное упоминание begin/end.
Можно долго спорить на субъективные темы, но есть объективный критерий: http://www.gamedev.ru/flame/forum/?id=156371
Ну и конечно же, аргумент про миллионы мух.
Ты начинал неплохо, спорил на серьёзные темы, а скатился до аргументации на уровне молодого крестопионера.
Boo
F#
Nemerle c #pragma indent
Никого не забыл?
Не нужен ;)
Таки обычно, когда говорят эту фразу - аргументов назвать не могут, но я все же спрошу:
Аргументы?
Ну а претензия самая обычная - этот язык не приблизит меня к решению моих задач. Мне бы просто быдлокодить, чтобы быстро писалось и легко читалось, для этого подходит Жаба. А Немерле предлагает то, чего я никогда использовать не буду - всякое метапрограммирование, паттерн матчинг и функциональщину. То есть, просто добавленную сложность.
> добавленную сложность
Мощные функциональные и гибридные языки - палка о двух концах. Они могут сделать тебя гораздо продуктивнее (и мотивированнее, кстати), а могут и утопить в сложности абстракций.
К сожалению, людей, способных к продуктивному использованию таких языков, довольно мало, причём большая часть этих людей не заинтересована в изучении и применении таких языков.
Программирование нынче становится социальным, и исходный код, как и любой продукт, предназначенный для массового потребления, должен быть понятен сотням людей с разным бэкграундом и образованием. И никого не волнует, что одна строка с map и reduce эффективно решает задачу и рудует глаз функциональщика, извольте писать циклом, так, чтобы все поняли.
по мне так всё это очень грустно.
TODO: научиться писать для радования глаз функциональщиков.
Вы пробовали использовать map/reduce (не как архитектурное решение, а для простых вычислений), к примеру, в java? Отсутствие функций как объектов первого рода и лямбд делает использование абстракций map/reduce в обычном коде сопряжённым с огромным оверхедом, а следовательно, нежелательным.
От себя скажу, что лисп-макросы и идея bottom-up programming, к примеру, меня очень впечатлили (гораздо больше, чем ООП в своё время). Возможность без особых заморочек изменить язык под свои нужды, сохранив при этом всю его мощь, очень вдохновляет.
С нечитаемостью закорючек полностью согласен, сам часто глаза ломал. Но begin-ы, имхо, избыточны, т.к. всегда прилеплены к какой-то конструкции (началу функции, условию, циклу). Даже если не вдаваться в крайности типа значимости отступов, можно их безболезненно убрать, введя, например, правило автооткрытия блоков, если за всякими вайлами и ифами сразу на строке ничего нет. Ну и краткость будем считать сестрой таланта: "then" нафиг, procedure/function изволим звать "def" и будет все просто и лаконично. А не как эту срань Ada, где end-у нужно говорить, чей он.
10 уровней вложенности? ведь иногда можно писать более одного def. Затраты на идентацию аналогичны затратам в других языках.
Зато если енд забудешь, то не будет по всему коду бегать и искать, где ты его забыл.
Опять вы про скорость набора говорите, а это дело последнее.
с тех пор я написал миллион закрывающих скобок и не имел никакого батхерта
но раз программисты на аде не могут писать синтаксически корректный код с первого раза, то конечно пускай насилуют клавиатуру, скорость набора ведь дело последнее
а ведь дело в простом - как только ты при наборе текста ставишь открывающую скобку, ты (или среда) тебе сразу ставит закрывающую (это несложно делать и самому - скобки то соседние клавиши), затем ты нажимаешь один раз энтер и уже пишешь внутри блока {} и уже с отступами. Это же настолько очевидно. Тарас, почему у тебя проблемы с такими элементарными вещами?
в процессе перелопачивания кода нормальная IDE всегда покажет matched brackets жирным, а mismatched brackets красным, скобка обязана закрыться на той позиции, где начинался её блок, положением блока легко управлять выделение + таб/шифт-таб
редактор твой друг, ни с++ ни паскаль в блокноте писать не нужно, это сразу снижение производительности труда в 10 раз
и да, за уровни вложенности, начинающиеся на середине экрана, надо нещадно пиздить в любом языке
Мне это утверждение кажется очевидным. Меня всегда терзал вопрос, что, ЧТО курили авторы GNU coding style.
Интересуюсь, чтобы случайно не выкурить того же
Ну не всегда получается так, как надо.
и да, код, написанный тобой для примера - херня, потому что 1) после } точка с запятой не нужна, 2) использовать константы капслоком (небось задефайненные) - это тебе в сишечку, 3) лично я в for/if/etc предпочитаю египетский стиль, 4) ты заведомо выбрал разные шрифты с разным интервалом и с разной констрастностью, тема про шрифты уже поднималась и хуже курьера, на мой взгляд, сложно что то найти, но твой пример у меня выглядит так http://db.tt/XpP6fjzi - у тебя проблемы с поиском отступов?, 5) т.к. ты привел разные по содержанию примеры, я попытался воспроизвести твой дельфишный пример на С++ и пришел к неутешительному выводу, что твой код - реальный кал.
Об этом поподробней.
Ты написал явно какой то хендлер (наверное, ввод с клавиатуры), и в нем пытаешься засунуть введенный символ в (самописный?) edit. Ок. Ты вызываешь (глобальную? sic!) функцию EditInfoPtr, которая тебе как бы должна вернуть указатель на твой эдит (корректность указателя?), после чего, вместо того, чтобы передать объекту эдита задачу "съешь вот этот символ да выпей чаю и изменись", ты отбираешь у него его работу - получаешь контекст, затем работаешь с данными эдита (S?), при этом применяешь стрёмные махинации с (непустотой?) данных - типа если в первый раз, то заводим первую строку? - после чего ты управляешь данными эдита, смещаешь курсор, видать, перерисовываешь - в общем, у меня рука не поднялась воспроизводить этот OOP-hater кал. Знаешь, инкапсуляция - это объединение данных и методов работы с этими данными под одной крышей - классом - и такую простую вещь поддерживает даже ООП реализация в дельфи, пробуй!
ЗЫ как видишь, ты тоже пользуешь египетский стиль, не вижу чем 9 символов "begin" "end;" в этом случае имеют преимущество перед двумя {} - как и ненужные "procedure", "var"
подумай над этим
вы такой индивидуальной величиной решили оперировать? а не пойти ли вам нахуй в таком случае?
малыш, читай тред внимательней
> http://www.gamedev.ru/flame/forum/?id=156371
> Соломон Страуструбер - виртуал тараса
> "но всё-таки самый важный параметр - читаемость кода."
я так и не дождался
ты что, ошибся разделом, кобелёк? где твой хозяин? он тебя выкинул на улицу как только ты ему нагадил в ботинки? приезжай в москву, тут собакам делают уколы, отчего они хоть и становятся бесплодными, но очень жирными и спокойными
У нас на говнокоде атмосфера всеобщей любви и радости, вообще-то.
его что, кто то приглашал отвечать на вопрос, что был направлен лично тебе? причем демонстрируя такую глубину адекватности
если ты таким образом думал руками виртуала соскочить с темы "да я ща всем покажу божественный код с двумя отступами и жирными begin end;", то ты скажи, я пойму
Ну и что? Но крестошколоте и этого достаточно, чтобы, радостно повизгивая, подплюснуть.
> Ты вызываешь (глобальную? sic!) функцию EditInfoPtr
Не понял, а чё, в крестах вообще бывают другие функции?
> после чего, вместо того, чтобы передать объекту эдита задачу "съешь вот этот символ да выпей чаю и изменись", ты отбираешь у него его работу
Потому что я и делаю за него всю работу, потому что встроенные средства делают эту работу не так, как я хочу.
> Знаешь, инкапсуляция - это объединение данных и методов работы с этими данными под одной крышей - классом - и такую простую вещь поддерживает даже ООП реализация в дельфи, пробуй!
Куда их объединять, у меня и так всё в конечном итоге сводится к вызову функции "сделать правку", принимающей хитрую структуру, и делающие все операции над буефром правок. Ты этого не знал, но посрать всё равно решил.
У меня баттхёрт от того, что я спорю с мудаком и 95% долбоёбов на его стороне.
прикинь, еще бывают статические и нестатические члены класса.
> потому что встроенные средства делают эту работу не так - VCL настолько убога, что невозможно отнаследоваться от эдита и переопределить лишь необходимые вещи? Это конечно весело, но врядли правда.
> хитрую структуру
вот в этой хитрой структуре (editinfo видимо) тебе и нужно было сделать метод, принимающий inserting_symbol и в нем 1) делать выделение первой строки в буфере при первом использовании (кстати почему не сразу, при создании, экономишь 16 байт на объект?) 2) не сравнивать допустимость caret.line - консистентностью объекта обязан заниматься сам объект, должно быть предельно ясно, что при любом вызове editinfo.insert_symbol каретка находится в нормальном состоянии 3) называть поля и методы так, чтобы не возникало вопросов - например, caret.symbol -> очевидно caret.pos (судя по коду ты инкрементируешь позицию, а не символ каретки), S -> lines, Larged (Увеличенный? чзх) -> я тут затрудняюсь, но походу он перерисовывает (одну?) строку на контексте - вот как раз вот этот вот метод может сам внутри получать и освобождать контекст.
Вот видишь, ты вроде бы похвалился своим кодом, а вышло не очень круто.
А что такое функция-член класса? Это тоже глобальная функция, которая первым параметром принимает указатель на объект. И в Аде, что самое интересное, допускается записывать один и тот же метод как A.DoSmth, так и DoSmth(A). Зато при объявлении метода удобно ставить, изменяется ли объект в методе - просто модификатором при первом параметре.
Так вот EditInfoPtr(H) - это, считай, функция EditInfoPtr() класса HWND, если тебе нравится. Можешь мысленно видеть вместо ней H.EditInfoPtr().
> настолько убога, что невозможно отнаследоваться от эдита
Чё, самый умный?
Молодой человек, вы когда-либо наследовались от Едита? Мне кажется, что нет, потому что иначе бы вы поняли, почему я от него не наследуюсь.
Так вот - в нём обработчик WM_CHAR вызывает отрисовку окна, причём напрямую, а не через WM_PAINT. Если перехватишь WM_PAINT, то ты сможешь изменить только отрисовку каретки.
> не сравнивать допустимость caret.line - консистентностью объекта обязан заниматься сам объект
Пилять, а у меня сам объект и занимается.
H.InsertSymbol(Code)
Объект H, метод InsertSymbol.
Всё оопешно, проблемы?
> вот в этой хитрой структуре (editinfo видимо) тебе и нужно было
Нет, структура для правки называется TCorrection. Да, и в неё я в итоге всё и перенёс. Там в теме был промежуточный вариант кода.
конечно, перемещение каретки обязаны быть согласованы с состоянием объекта, именно поэтому caret в нем обязан быть приватным полем, а перемещением должны заниматься отдельные методы (хотя бы set/forward/backward/up/down).
а так твой код выглядит будто сантехник вася из подворотни в любой момент может тебе обычным присвоением caret.line = 100500 сделать, а ты типа к этому готов
А оно и есть приватное поле этого EditInfoPtr, и обращаюсь я к нему внутри метода объекта. Снаружи к нему доступа нет, очевидно.
Хотя, конечно, запретить напрямую обратиться по указателю на это поле я не могу, ну так это везде так.
хакиры
Ты про отсутствие модульности?
>>У меня баттхёрт от того, что я спорю с мудаком и 95% долбоёбов на его стороне.
ахаха
В gcc например, расширили Си и даже разрешили брать указатель на вложенную функцию, ради чего нахуевертили трамплины, пробивающие брешь в защите.
В Паскале есть вложенные функции, по совместительству являющиеся замыканиями, захватывающими весь локальный конь-текст, но вот указатели на них брать нельзя.
Ах, да, в новых крестах (с C++11) есть лямбды, даже с захватом по выбору, а не всего подряд.
у меня в машине Тюринга нет никаких "функций", а написать на ней можно что угодно
Конечно, лучше, когда 95% долбоёбов на твоей стороне.
Как у фараонов - лежишь без внутренностей в пирамиде.
Я бы даже был согласен писать be/en, но на каждый уровень вложенности писать по восемь символов - перебор. Более того, будь у меня свой язык, со шлюхами и свистелками, там бы блоки я выделял через [ ]. Ибо они пишутся в стандартной раскладке без шифта.
Чой-то сразу вспоминяется Objective недокресты
Никакой причины вводить новый вид скобок для этого в Си не было.
Так что же, будет Муромец, что ли, вырастать? Илья Муромец, что ли, будет вырастать из этого?
К — язык программирования, оптимизированный для работы с массивами, модификаторами действий. Среди особенностей — отсутствие циклов, зависимые переменные, структура K-дерева (K-tree).