Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2010.11.14;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.004 c
3-1247637607
Alexander
2009-07-15 10:00
2010.11.14
ADO: использование Command в качестве source для Recordset


15-1280704083
Германн
2010-08-02 03:08
2010.11.14
Win 7. №2


15-1280870999
Юрий
2010-08-04 01:29
2010.11.14
С днем рождения ! 4 августа 2010 среда


15-1280511663
Darth Revan
2010-07-30 21:41
2010.11.14
HowTo: Полностью избавиться от меток.


15-1280996881
abun
2010-08-05 12:28
2010.11.14
Как программно отследить события





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский