Форум: "Основная";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];
Внизbegin...end Найти похожие ветки
← →
Игорь1 (2004-08-15 12:10) [0]Подскажите, пожалуйста, имеет ли смысл писать begin вот в таких ситуациях и если да, то почему.
спасибо.
if x <> 0 then
begin // ?
for i := 0 to 10 do
begin
...
...
end;
end;
или
if x <> 0 then
begin // ?
case x of
1:
...
2:
...
end;
end;
или можно проще:
if x <> 0 then
for i := 1 to 10 do
begin
...
...
end;
← →
YurikGL © (2004-08-15 12:12) [1]
> или можно проще:
>
> if x <> 0 then
> for i := 1 to 10 do
> begin
> ...
> ...
> end;
Вполне рабочий вариант
Правда try+except не мешало бы
← →
jack128 © (2004-08-15 12:13) [2]Я дополнительньх end"ов не пишу. Но отступы делаются в обязательном порядке!!!
← →
Anatoly Podgoretsky © (2004-08-15 12:14) [3]Дело вкуса.
← →
TeNY © (2004-08-15 12:20) [4]я всегда ставлю потому что иногда в таких ситуациях происходит ошибочный переход
неправильно:
if a>z then
if a=b then...;
else ...
правильно:
if a>z then
begin
if a=b then...;
end
else ...
← →
YurikGL © (2004-08-15 12:25) [5]
> TeNY © (15.08.04 12:20) [4]
Правильно
if a>z and a=b then
← →
YurikGL © (2004-08-15 12:30) [6]косякс...
if (a>z) and (a=b) then begin
..... end
else begin
end;
← →
YurikGL © (2004-08-15 12:32) [7]Хотя все зависит от того, к какому if-у должно семантически относится else
← →
TUser © (2004-08-15 13:59) [8]Я пишу begin ... end, если там несколько операторов или есть вложенный if с else"ом, а у данного if тоже есть esle. Т.е. собственно тогда, когда это действительно необходимо. Хотя, если бы мне платили за строчку кода, то всегда бы писАл :)
← →
Anatoly Podgoretsky © (2004-08-15 14:06) [9]Если бы платили за строчки, то писал бы так
if
условие
then
begin
...
end;
← →
TeNY © (2004-08-15 16:57) [10]
> YurikGL © (15.08.04 12:25) [5]
>
> > TeNY © (15.08.04 12:20) [4]
>
> Правильно
> if a>z and a=b then
Ты не учи меня как циклы правильно писать я ведь не определённый цикл показывал а суть то есть сам принцип а вся эта фигня со скобками дело мутное и трудно отлаживаемое
← →
YurikGL © (2004-08-15 17:34) [11]
> иногда в таких ситуациях происходит ошибочный переход
Это простите как? То есть иногда делфи правильно переход делает, иногда ошибочно?
Может для большей читабельности кода используешь begin..end? В это поверю. А в то, что делфи неправильно переходит....
> Ты не учи меня как циклы правильно писать
И где здесь циклы?
← →
Anatoly Podgoretsky © (2004-08-15 17:44) [12]YurikGL © (15.08.04 17:34) [11]
Это перефразированя фраза - не учите меня жить
← →
YurikGL © (2004-08-15 17:52) [13]Anatoly Podgoretsky © (15.08.04 17:44) [12]
> неправильно:
> if a>z then
> if a=b then...;
> else ...
>
> правильно:
> if a>z then
> begin
> if a=b then...;
> end
> else ...
Оба варианта правильны в зависимости от того, какая логика выполнения требуется от программы. Единственное, что не правильно в первом варианте это - ; но компилятор просто ругнется на это.
← →
Михаил Макушев (2004-08-15 18:03) [14]>Правильно
>if a>z and a=b then
Такая ситуация не пойдет если в проверке условий используются скажем критичные на разрушение программы функции (проверка созданий объектов и пр.) тогда только такой вариант c двойным IF
← →
Юрий Зотов © (2004-08-15 18:44) [15]Никогда не пишу:
1. Лишние begin-end.
2. Лишние скобки.
3. Лишние точки с запятой.
4. И вообще ничего лишнего.
Можно сказать, что все это - дело вкуса. Но правило "в программе не должно быть ничего лишнего" заставляет постоянно думать - то есть, дисциплинирует и приучает к аккуратности при кодировании. В итоге снижается количество ошибок - вот зачем это нужно.
В частности, приведенный выше пример
if a > z then
begin
if a = b then...;
end
else ...
я бы написал так:
if a <= z then
...
else
if a = b then ...
← →
GuAV © (2004-08-15 20:16) [16]А в таких случаях пишут:
if Condition1 then
if Condition2 then
Statement1
else
else Satement2;
илиif Condition1 then
begin
if Condition2 then
Statement1;
end
else Satement2;
← →
Юрий Зотов © (2004-08-15 20:18) [17]Добавление.
Этот пример я бы написал так в том случае, если скорость исполнения данного уска некритична, или если мне заранее ничего не известно о возможных значениях A, B и Z.
В противном же случае есть правило - писать цепочку проверок так, чтобы результат был получен как можно быстрее. И когда скорость критична, то она важнее, чем лишние begin-end.
← →
GuAV © (2004-08-15 20:25) [18]GuAV © (15.08.04 20:16) [16]
Знак вопрса пропустил...
← →
Anatoly Podgoretsky © (2004-08-15 20:29) [19]Когда скорость важна, то требуется просмотреть код условных операторов в окне CPU, что бы выполнялось наиболее вероятное и часто условие, иначе будет пенальти по тактам. Если видно, что переход неверный, то сменить условие на инверсное.
← →
GuAV © (2004-08-15 20:39) [20]Anatoly Podgoretsky © (15.08.04 20:29) [19]
И зачем Вы тогда пишете
> begin...end
, писали бы asm...end ;-)
← →
Anatoly Podgoretsky © (2004-08-15 20:51) [21]Затем, что ассемблер надо использовать только в исключительных случаях, когда на паскеле не получается (работа с флагами) или когда выходит действительно серьезное повышение производительности. Код на ассемблере будет не транспортабельный в .net
Поэтому я использую асм код в очень редких случаях. Оптимизатор у Дельфи достойного уровня.
← →
Vetek_2 (2004-08-15 21:01) [22]у меня раз были крупные проблемы с тем, к какому IF"у относится else ....
(прога жутко глючила, не сразу догадался где ошибка была..)
- в итоге я сейчас пишу в таких случаях обязательно begin end :))
- имхо очень повышает понятность логики работы :)))
← →
GuAV © (2004-08-15 21:25) [23]
> Оптимизатор у Дельфи достойного уровня.
Мда. Разработчики средства разработки оптимизируют компилятор под приложения, чтобы генерировать инструкции хорошо в любой ситуации.
Разработчики приложения оптимизируют код приложения под компилятор, чтобы генерировать инструкции хорошо в конкретной ситуации. Сами явно задать инструкции не могут.
Причём производительность оценивают через Debug Windows->CPU. То что вроде как бы для отладки, а не для оптимизации.
И всё ради транспортабельности в нет. А ведь такая отимизация может быть не портируема даже от компилера к компилеру. Например в Дельфи лучше не использовать переменную цикла повторно, чтобы он мог её в "регистры запузырить". В каком то паскале все переменные в стеке, т.е. лучше использовать повторно. При этом хотим портировать "в другой мир". Клоунада...
← →
Германн © (2004-08-16 03:21) [24]И все таки возвращаясь к сабжу:
Игорь1 (15.08.04 12:10)
Подскажите, пожалуйста, имеет ли смысл писать begin вот в таких ситуациях и если да, то почему.
спасибо.
if x <> 0 then
begin // ?
for i := 0 to 10 do
begin
В таких случаях я почти всегда пишу и begin и end.
Дело в том, что и then и do, в общем случае предполагают наличие за ними некоего "тела", т.е. набора строк исходного текста, которые все либо должны быть выполнены, либо не выполнены, либо выполнены частично.
Поэтому и тело then и тело for богут быть весьма длинными, или не быть таковыми. А для удобочитаемости я всегда (иногда по необходимости, а иногда для удобства) использую begin и end.
А компиллятор и оптимизатор Дельфи, при этом, не создают мне лишних проблем.
← →
Anatoly Podgoretsky © (2004-08-16 07:34) [25]GuAV © (15.08.04 21:25) [23]
Ты представляешь как работает предсказание в Пентиумах?
← →
panov © (2004-08-16 09:52) [26]В 99% случаях пишу begin..end, так как для меня важна читабельность кода, а не количество символов в исходном коде.
← →
Anatoly Podgoretsky © (2004-08-16 09:55) [27]Тоже почти всегда, а если есть else то всегда
← →
Григорьев Антон © (2004-08-16 10:24) [28]Я предпочитаю делать так: вместо
if ... then
begin
...
...
...
end
else
X:=0;
писать
if ... then
begin
...
...
...
end
else
begin
X:=0
end;
Чтобы у двух веток if было единообразие. В остальных случаях лишних begin/end не ставлю.
← →
GuAV © (2004-08-27 01:12) [29]
> Ты представляешь как работает предсказание в Пентиумах?
Что за Предсказание?
← →
ASoft (2004-08-27 07:44) [30]Если в теле процедуры много "If" и "Else", то лучше использовать, по возможности, "Case".
Но, порой, трудно отследить всё от begin...If...Else...до последнего end, то лишними begin..end не будут. А будет на подобие упорядочивания. Так думаю.
← →
DiamondShark © (2004-08-27 13:07) [31]
> Ты представляешь как работает предсказание в Пентиумах?
По звёздам.
← →
JohnnyJ (2004-08-27 13:23) [32]Я пишу всегда так:
if (condition) then
begin
<одна и более строка кода>
end
else
begin
<одна и более строка кода>
end;
Просто наблюдал долгую и кровопролитную битву человека с приложением, когда в ветке else был один оператор, он добавил еще один, а про begin..end забыл. Все компилится, а работает неправильно :)
Отлаживаться он толком не научился, сколько его паяльником и кипятильником не били. Прошел бы в отладке - заметил бы сразу. А так он пнул - данные кривые, полез что-нибудь подровнял в проге, снова пнул.
После этого случая взял себе за правило оформлять код именно так. Т. е. если требуется в конструкции оператор, то я ставлю составной оператор.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.035 c