OAB>>>и т.д... и посмотрю на того кто осмелится такое писать в одну строку! OAB>>> Понимаю что процедуры на 2-3 экрана это не нормально, но иногда без них не обойтись
M>>Если надо — обойтись всегда можно. Надо привыкать делать из хорошего кода еще более лучший, если это себя оправдывает. M>>Рефакторинг рулит. Паттерн Выделение метода (Extract Method). Примерчик там, правда, галименький, но ничего лучшего я не нашел. Применяем его с одновременным применением паттерна добавление параметра (Add Parameter).
M>>Сокращаем текст длинного метода на ~5 строк. Заодно если называем только что выделенный метод правильно, не нужно тратить лишние строки на поясняющие комментарии (самодокументированность).
OAB>это все хорошо, но как я уже сказал ИНОГДА без этого не обойтись. OAB>1. я сам не приемлю работать с рекордами, но когда нужна скорость при выделении/освобождении памяти блоками, скорость доступа и т.д — я их использую, а так предпочитаю классы. OAB>(итак мне нужна была скорость) OAB>2. вы как минимум забыли в процедуру передать 1 параметр — this.
Нет. Выделенный метод и изначальный метод находится на одном уровне (в том же классе, либо оба глобальные). При вызове из того же класса this передается неявно. А если глобальные, какой тут тогда this. (В дельфях же есть вроде глобальные методы, если я не ошибаюсь)
OAB> да, он не попал в увиденом блоке, но он есть.
OAB> один параметр конежно же мелочь, если... если у нас не будет глубоких вложенных рекурсий, а они тоже есть.
Если методы на одном уровне — это по барабану. В большинстве случаев. Рефакторинг — преобразование эквивалентности. То есть только что отрефакторенный код делает то же самое, что и неотрефакторенный, но выглядит иначе, удобнее для каких-то целей.
OAB>так что если добавить к этому, что inline появилась только в D9... это то самое иногда.
Борьба эффективности и понятности.... старая история.
В борьбе бобра с ослом всегда побеждает бобро. (с) Сергей Бобро.
OAB>PS код кстати приводился по сабджу
У нас не сабдж а флейм. Мы в хуморе.
Здравствуйте, Mr. None, Вы писали:
MN>Ну продемонстрировали вы числа... И что? Я тоже много чисел знаю... ООЧЕНЬ много... могу их все продемонстрировать... А смысл в чём?
Смылсл?
Два программиста:
П1: Мне нужен генератор случайных чисел!
П2: 43!
M>>Сергей. Вы, как самый ярый сторонник Оберона, можете внятно и с фактами на руках показать преимущество Оберона?
СГ>Конечно могу. Но только это не тема данной ветки форума. Тема этой ветки форума: 235% и 700%. Ваша ошибка в том, что Вы делаете далеко идущие выводы из этих чисел. В этой ветке я ни чего доказывать не собираюсь. Просто демонстрирую числа 235% и 700%. Признаться, мне трудно сдерживать себя от того чтобы полезть чего-то доказывать. Здесь речь исключительно только о синтаксисе.
А смысл такой демонстрации? Тем более, что уже не раз неоднократно было показано, что "не лексемами едиными жив язык программирования". А альтернативные
Здравствуйте, moudrick, Вы писали:
M>Ничто тебе не мешает написать класс с перегруженными нужным образом операторами сравнения и приведения к double. Разве только отсутствие времени... Может и написан уже где-то. Поиск в осети рулит.
Здравствуйте, Oleg Volkov, Вы писали:
OV>Здравствуйте, Сергей Губанов, Вы писали:
СГ>>1) Как Вам только что показали структурную парадигму не поддерживает.
OV>Вы хотите сказать, что на С/С++ невозможно обеспечить p == false после выхода из цикла while(p)?
Конечно нельзя, вот пример
p = true;
while(p)
{
break;
}
assert(!p); // этот ассерт всегда будет останавливать работу программы.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, moudrick, Вы писали:
M>>Что, и сборку мустора будем на Оберонах писать? Успехов... покажите только потом исходники, посмеемся вместе.
СГ>Известно, что BlackBox Component Builder 1.5 от Oberon Microsystems распространяется с открытыми исходными текстами на языке Component Pascal (наследник Оберона 2). В том числе модуль Kernel тоже написан на нем. Поскольку проект является open source, то я не понимаю, что до сих пор удерживало Вас от того чтобы посмотреть исходники самостоятельно? Что значит покажите? Берите и смотрите сами, они доступны любому без ограничений!
Я уже просмотрел все проекты Open Source в интернете. По состоянию на 12 мая 2005 года. И провел их подробный анализ. К сожалению, каким-то непостижимым образом пропустил BlackBox Component Builder 1.5 от Oberon Microsystems. Сегодня вечером исправлю эту ошибку. Простите меня пожалуйста.
СГ>Ваше отношение тем более не понятно в свете того, что известно, что подсистема управления динамической памятью (выделение памяти + освобождение ее сборщиком мусора) в BlackBox работает в несколько раз быстрее чем в .NET.
Здравствуйте, moudrick, Вы писали:
M>Это все равно что путать "правила игры" и "технику игры". Знавал я таких (юных) преферансистов, среди которых бытовало прпвило "на третью даму не закладываться". Долго же я им объяснял, что понятие "третья дама" к правилам преферанса не имеет отношения, это элемент описания техники игры.
А вот нифига! Я встречал конвенцию игры в преферанс, где за недозаклад (скажем, при чистой восьмерной заказал шесть — и, естественно, огорчил вистующих) писали "без одной".
В этом случае третья дама не считается за взятку, а марьяж или (король,дама)-валет-десять считается. (Разумеется, под прикрытием козырей).
Аналогично этому, С++ный приём закрывания угловых скобок через пробел — хотя и является техникой — фактически, относится к правилам.
Здравствуйте, Mr. None, Вы писали:
СГ>>1) Как Вам только что показали структурную парадигму не поддерживает.
MN>Сударь! "Программирование без goto" и "структурная парадигма" — это совершенно разные понятия!
У кого-то разные, а у кого-то нет. goto может легко нарушить пост условия циклов WHILE и REPEAT.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, moudrick, Вы писали:
M>>Что, и сборку мустора будем на Оберонах писать? Успехов... покажите только потом исходники, посмеемся вместе.
СГ>Известно, что BlackBox Component Builder 1.5 от Oberon Microsystems распространяется с открытыми исходными текстами на языке Component Pascal (наследник Оберона 2).
У меня начинает складываеться такое впечатление, что вы читаете 2 — 3 последних слова в сообщении и начинаете отвечать только на них, совершенно выкидывая всё остальное, тем самым меняя смысл вопроса. Или я бы даже сказал грубее — вы отвечаете только на то, что вам удобно или на что вы знаете ответ... Вопос о том являются ли исходники Оберона открытыми или нет тут не стоял — это была ирония, сарказм, не требующий ответа. Вопрос состоял в следующем, если вы не поняли: как GC может быть написан на самом Обероне, если он уже является его составной частью?
Варинаты ответа:
1) GC написан на другом языке;
2) GC написан на обрезанном варианте Оберона без многих функций защиты (потому что он нужен для их реализации), как следствие при написания GC не было GC.
3) вы не знаете.
Четврётого варианта я не вижу.
Варианты ответа 1 и 2 атоматически означают, что сам по себе GC не защищён и может содержать ошибки, следовательно ошибка в GC не будет перехвачена обероном и приложение таки упадёт, будь оно хоть трижды надёжным (не знаю зачем вообще я это объясняю — это должно быть понятно всем и так). Вариант 3 не говорит ни о чём, кроме того, что вы не знаете и всё.
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Сергей Губанов wrote:
> Q>Да задолбали вы уже этой уверенностью! > Это называется научный подход к программированию. Программирование, > оказывается, тоже есть наука. > Кстати, здесь <http://rsdn.ru/Forum/Message.aspx?mid=1233660&only=1>
Здравствуйте, Трурль, Вы писали:
Q>>Я часто проверяю условие p именно с целью узнать, как произошел выход из цикла: по брейку или "мирным путем". Т>Теперь понятно, почему с++программисты так озабочены отладчиками и средствами рефакторинга.
Это касается не только С/С++. В чем проблема такой "озабоченности"?
Здравствуйте, Трурль, Вы писали:
Т>Здравствуйте, qwertyuiop, Вы писали:
Q>>Я часто проверяю условие p именно с целью узнать, как произошел выход из цикла: по брейку или "мирным путем". Т>Теперь понятно, почему с++программисты так озабочены отладчиками и средствами рефакторинга.
Можно подумать, программеры java или C# ими менее озабочены.
Наоборот, ставят свои продвинутые развитые средства этого самого как преимущество перед С++.
M>>Я вам могу сказать, какие приоритетные принципы у C++. M>>1. Поддержка максимального количества парадигм программирования (в том числе и структурного) здесь Т>И все из них поддерживаются кое-как.
В достаточной мере. Для использования многих парадигм выразительных средств хватает.
M>>2. Поддержка Legacy кода здесь Т>Написанного по большей части на C++
На C. На старых версиях C++, коих было уже много, Язык развиваются, парадигмы добавляются, код пишется, используется и работает.
Код, написанный на старых версиях должен работать. Совместимость снизу вверх — еще библейский принцип.
"Не думайте, что Я пришел нарушить закон или пророков, — сказал Он, — не нарушить пришел Я, но исполнить" Евангелие от Матфея (Мф. 5:17);
Отказ от поддержки в стандарте каких-то устаревших особенностей и/или совместимости с ними всегда дается очень болезненно.
Здравствуйте, Cyberax, Вы писали:
C>Плевать мне на теорию про три цикла. На _ПРАКТИКЕ_ (подчеркиваю C>специально) нужен break для нормального кода.
Мне даже интересно стало. Может покажете пример?
C>А необходимости в зависимости от инвариантов цикла у меня не возникало C>ни разу.
Речь, вообще-то, не об инвариантах цикла, а о пост условиях. Инварианты цикла — это немного другое.
C>Да... теперь понятно почему Обероны давно сдохли. Абсолютно непрактичная C>вещь.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, Mamut, Вы писали:
M>>Ааа. Понял То есть — а на чем же написан рантайм Оберона? Боюсь, на ассемблере. Вернее, того Оберона, что BlueBottle. BlackBox вполне себе на C наверное написан
СГ>Почему Си, а не Паскаль (1970), а почему не Модула 2 (1979)
Потому что последнии релизы C новее и удобнее, я не говорю уже о C++...
СГ>а почему не сам Оберон?
Ну уж это звиняйте физически невозможно... Разве что только писать не листочке, потом в уме компилировать в инструкции процессора и вбивать руками их в файл... Другого способа не вижу...
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Здравствуйте, Cyberax, Вы писали:
C>Сергей Губанов wrote:
>> Q>Да задолбали вы уже этой уверенностью! >> Это называется научный подход к программированию. Программирование, >> оказывается, тоже есть наука. >> Кстати, здесь <http://rsdn.ru/Forum/Message.aspx?mid=1233660&only=1>
, >> за "задолбали", оказывается, могут наказать. Прошу Вас впредь быть >> поосторожнее.
C>Угу, поэтому все академические разработки весьма успешно загибаются. C>Живет только созданое практиками.
С++, кстати, тоже начинался с академической разработки. А практики его потом подхватили.
Ссылку навскидку не нашел, извините.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, Mr. None, Вы писали:
СГ>>>1) Как Вам только что показали структурную парадигму не поддерживает.
MN>>Сударь! "Программирование без goto" и "структурная парадигма" — это совершенно разные понятия!
СГ>У кого-то разные, а у кого-то нет. goto может легко нарушить пост условия циклов WHILE и REPEAT.
Ну простите — у вас может и не разные... У всего мира разные, включая самого Вирта, а у вас нет...
Вместо того, чтобы народ смешить шли бы мат. часть поучили!
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Здравствуйте, AVC, Вы писали:
AVC>Но особенность ситуации в том, что в обероновской среде нет никакого отдельного IDE. AVC>Считаю, что объединение мной особенностей языка и среды в данном случае совершенно правомерно.
Правомерно, только если брать возможности среды, зафиксированные стандартом оберона (раз уж они неразделимы).
Которые, соответственно, прошу в студию.
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, moudrick, Вы писали:
M>>Это все равно что путать "правила игры" и "технику игры". Знавал я таких (юных) преферансистов, среди которых бытовало прпвило "на третью даму не закладываться". Долго же я им объяснял, что понятие "третья дама" к правилам преферанса не имеет отношения, это элемент описания техники игры.
К>А вот нифига! Я встречал конвенцию игры в преферанс, где за недозаклад (скажем, при чистой восьмерной заказал шесть — и, естественно, огорчил вистующих) писали "без одной"
Блин. Против этого правила — преферанмная поговорка есть. *Недозаложился (вариант — перезаложился) — залез в совй карман.*
А вистущим надо грамотно вистовать. И тогда и недозаклад, и перезаклад играются так, что поговорка справедлива.
Преферанс — не для азарта, а для мышления.
К>В этом случае третья дама не считается за взятку, а марьяж или (король,дама)-валет-десять считается. (Разумеется, под прикрытием козырей).
Считает взятки игра, а не расклад. Расклад лишь обусловливает некоторые моменты игры.
К>Аналогично этому, С++ный приём закрывания угловых скобок через пробел — хотя и является техникой — фактически, относится к правилам.
Ничего страшного. Есть правила и у техники. Называются "правила техники безопасности".
Кто-то когда-то работал на промышленном производственном постсоветском предприятии?
Вы спорите против прописных истин.
Циклы с проверкой условия выполнения и циклы с проверкой условия завершения для того и придуманы, чтобы гарантировать выполнение пост условий. Вообще же достаточно было бы иметь лишь один тип цикла LOOP ... END и больше ни чего не надо, ни WHILE ни REPEAT. Но, опять же таки, вспоминаем: Сделать так просто как только можно, но не проще!