Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.11.14;
Скачать: CL | DM;

Вниз

HowTo: Полностью избавиться от меток.   Найти похожие ветки 

 
Darth Revan   (2010-07-30 21:41) [0]

Многие понимают, что использование GoTo сильно влияет на качество кода. Но, тем не менее, всё равно он продолжает использоваться!
В FreePascal есть даже целая команда, запрещающая использование GoTO, но смысл? Гораздо лучше сделать команду разрешающую GoTo, а лучше - совсем его запретить, как в развитых языках. Да, да, GoTo понижает Delphi перед другими языками, что является непосредсвенной причиной его упадка.

Большиство программистов уже признало, что между количеством меток в коде и профессионализмом создателя кода есть обратная зависимость. Но непрофессионалы утверждают, что в малом коде это не страшно. Но мы-то знаем, что малый код со временем растёт, а если и нет, то у программиста может создастся привычка ставить метки.

Сейчас я рассмотрю самый страшный способ использования меток. Он страшный из-за того, что его используют даже те, кто метки не любит, тем самым переходя на страшный путь быдлокодера:
procedure Some;
label
 done;
begin
1 часть кода
if X=Y then
 goto done;
2 часть кода
done:
3 часть кода
end;

Здесь из первой части кода производится GoTo во вторую, производя действия перед выходом из процедуры/функции. Но ведь есть и более кошерный способ делать что-либо из 3 части кода перед выходом из процедуры/функции!
procedure done;
begin
3 часть кода
end;

procedure Some;
label
 done;
begin
1 часть кода
if X=Y then
begin
 done;
 exit;
end;
2 часть кода
end;

Конечно, у этого способа есть недостатки, но они легко решаются. Например, если сразу несколько процедур/функций делают что-либо перед выходом, то появляются проблемы. Чтобы этого избежать, пишите не procedure done, а procedure Some_done. Т.е. с именем процедуры/функции.

Вот статья и закончилась. Надеюсь, она Вам помогла поверить, что можно обойтись без меток, и никогда их не использовать.

Помните, Delphi интересней, чем Вам кажется...


 
Darth Revan   (2010-07-30 21:41) [1]

Данная статья имеет две цели:
1. Показать, что GoTo, иногда, использовать лаконичнее, чем модульную систему.
2. Показать, как легко играть сознанием, если правильно поиграть на фактах. В этой статье это не сильно выражело из-за слишком большой абсурдности.
Будьте бдительны, когда смотрите новости, ибо там ещё играет интонация.


 
KilkennyCat ©   (2010-07-31 00:24) [2]

что это было?


 
Darth Revan   (2010-07-31 00:26) [3]

А я ведь написал во втором посте.


 
KilkennyCat ©   (2010-07-31 00:27) [4]

что, еще и второй пост надо читать?
а вопрос-то в чем?
что не получается-то?


 
Sha ©   (2010-07-31 01:49) [5]

> Darth Revan

Религия не добавляет к программированию ничего нового.


 
Германн ©   (2010-07-31 01:54) [6]


> Вот статья и закончилась. Надеюсь, она Вам помогла поверить,
>  что можно обойтись без меток, и никогда их не использовать.
>
>


> Религия не добавляет к программированию ничего нового.

+1


 
antonn (work)   (2010-07-31 10:44) [7]

вчера ковырял асмовскую процедурку, насмотрелся этих "меток"... <блюющий смайлик>


 
int64   (2010-07-31 11:06) [8]


> Да, да, GoTo понижает Delphi перед другими языками, что
> является непосредсвенной причиной его упадка.

ААААААА!!! Теперь я знаю, почему Delphi загибаица.


 
Pavia ©   (2010-07-31 12:21) [9]

Not лучше добавить и все становится на место.


 
Darth Revan   (2010-07-31 12:36) [10]

Как я понял, второй пост никто не читает.
Мораль: всё хорошо в меру!


 
turbouser ©   (2010-07-31 12:56) [11]


> Darth Revan   (31.07.10 12:36) [10]

Вброс не удался :)
тема про гото уже 100500 раз обсуждалась


 
Плохиш ©   (2010-07-31 14:05) [12]


> Darth Revan   (30.07.10 21:41)  

слишкам многа букаф...


 
@!!ex ©   (2010-07-31 15:44) [13]

на gamedev.ru есть подобный вброс.
Там довольно четко объясняется на примерах, что goto в ряде случае код УПРОЩАЕТ.
То есть, да, можно сделать конструкцию без goto, но есть ситуации, когда это только хуже сделает.
также надо понимать что exit, break и т.п. - суть завуалированные goto


 
@!!ex ©   (2010-07-31 16:03) [14]

Я сам goto не использую... предпочитаю более сложные конструкции, но без goto... это чисто моя религия.


 
Доярка Иванова   (2010-07-31 16:09) [15]

Меткиэтакрута


 
_Юрий   (2010-07-31 16:52) [16]

Да никто не использует эти ваши метки уже лет сто (или чуть меньше).
Так что проблема как таковая отсутствует.
Разве что в вузах до сих пор преподают? Они любят всякие древности


 
Юрий Зотов ©   (2010-07-31 17:40) [17]

Жара... бывает...


 
картман ©   (2010-07-31 17:46) [18]

вообще-то пост не про метки. И не о программировании. По крайней мере, не о программировании железяк.


> Юрий Зотов ©   (31.07.10 17:40) [17]
>
> Жара... бывает...

вот-вот


 
Sha ©   (2010-07-31 17:56) [19]

> _Юрий   (31.07.10 16:52) [16]
> Да никто не использует эти ваши метки

Почему же? Я использую.

Из недавнего обсуждения.
Есть низкоуровневая часто используемая функция, например:

function WideStrEnd(AString: PWideChar): PWideChar;
const
  WIDE_NULL_CHAR = WideChar(#0);
begin
  Result := AString;
  while Result^ <> WIDE_NULL_CHAR do Inc(Result);
end;


Стоит переписать ее, отбросив религию, с использованием
goto или exit, если это увеличит скорость на 60% ?

Если стоит, то что выбрать:
функцию с двумя выходами (exit) или с одним (goto) ?


 
Юрий Зотов ©   (2010-07-31 18:02) [20]

> Sha ©   (31.07.10 17:56) [19]

Саша, не спорь. Мы все должны преклонить колени перед великим семнадцатилетним гуру со стажем программирования в несколько лет максимум.

Братья! Возблагодарим же Учителя, снизошедшего до нас и принесшего нам Истину!


 
KilkennyCat ©   (2010-07-31 18:45) [21]

Ом мани падме хум!
что в переводе означает: лучше бы он дал мне деньги.


 
Anatoly Podgoretsky ©   (2010-07-31 19:25) [22]

> @!!ex  (31.07.2010 15:44:13)  [13]

Объяснить мы можем что угодно, не проблема, нас не корми, а дай объяснить.


 
Anatoly Podgoretsky ©   (2010-07-31 19:28) [23]

> KilkennyCat  (31.07.2010 18:45:21)  [21]

Перевод неправильный.
Не учите меня жить, лучше помогите материально.


 
Rouse_ ©   (2010-07-31 19:30) [24]


> antonn (work)   (31.07.10 10:44) [7]
>
> вчера ковырял асмовскую процедурку, насмотрелся этих "меток".
> .. <блюющий смайлик>

Сравнение меток в асме и дельфи категорически неверный подход. :)
Проще скобки из лиспа выкинуть...
Да и в том-же асме можно достаточно гармонично написать функцию, практически не отличающуюся от привычных нам образцов винапи кода.


 
vrem   (2010-07-31 19:43) [25]

давайте давайте, лихие мастера! к вам тут незнай как, но пробрался свежий посетитель. загнобите его, это же ваш сайт, чего это он пришёл :)


 
Anatoly Podgoretsky ©   (2010-07-31 19:48) [26]

И правда, нафига он к нам пришел, со своей глупой попыткой холивора, или как минимум с баяном? Чистый "незнай как"


 
Rouse_ ©   (2010-07-31 20:19) [27]


> vrem   (31.07.10 19:43) [25]

К чему вообще ты это сюда выплеснул?


 
Юрий Зотов ©   (2010-07-31 20:20) [28]


> Anatoly Podgoretsky ©   (31.07.10 19:48) [26]

Это даже и не холивар, да и вообще к програмизьму отношения не имеет. Товаришчь хотел "показать, как легко играть сознанием, если правильно поиграть на фактах" (см. [1]). Вьюнош открыл для себя очередную истину и вполне банально решил, что он первый, кто открыл ее. Психолог, панимашь?


 
Юрий Зотов ©   (2010-07-31 20:21) [29]


> Rouse_ ©   (31.07.10 20:19) [27]

Розыч, ну ты же знаешь, что такое overflow? Вот это оно и есть.


 
vrem   (2010-07-31 20:23) [30]

Юрий Зотов ©
Вашим способом мокрое полотенце на плечи пользуюсь, сплю даже так) спасиба) читаю Вас в этой ветке и понимаю "кондиционер он так и не купил" - ну были же рассуждения купить не купить, простужаться.


 
Юрий Зотов ©   (2010-07-31 20:26) [31]


> vrem   (31.07.10 20:23) [30]

А что, я собирался его покупать?


 
vrem   (2010-07-31 20:26) [32]

Удалено модератором


 
Rouse_ ©   (2010-07-31 20:28) [33]

Удалено модератором


 
Rouse_ ©   (2010-07-31 20:29) [34]

Да будет так :)



Страницы: 1 вся ветка

Текущий архив: 2010.11.14;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.009 c
2-1282306183
подмастерье
2010-08-20 16:09
2010.11.14
Создание своей формы


2-1282080138
подмастерье
2010-08-18 01:22
2010.11.14
Изменение свойств формы


2-1282687644
Просто Я
2010-08-25 02:07
2010.11.14
Так что ж такое Лейбл


15-1281080893
Knight
2010-08-06 11:48
2010.11.14
Как сделать быструю загрузку файла для просмотра?


2-1282150418
Ярослав
2010-08-18 20:53
2010.11.14
Иконка приложения