Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

25.12.2009, 01:46
|
Регистрация: 29.05.2002
Сообщений: 1,793
Провел на форуме: 2050916
Репутация:
0
|
|
Сообщение от Retimiled
кстати return - это тот же goto только в фас!
Ну не скажи. Во-первых кроме return тут большая компания: continue, break, throw... А во-вторых для этих операторов не требуется метка, точка выхода для них - более очевидна, чем для goto. Поэтому они считаются более-менее "структурными".
ЗЫ
Да и еще yield, как же ж без него, родимого, структурного нашего....
Последний раз редактировалось Algol; 25.12.2009 в 01:59..
|
|
|

25.12.2009, 01:48
|
|
Banned
Регистрация: 24.12.2009
Сообщений: 141
Провел на форуме: 487460
Репутация:
45
|
|
 да goto приближает нас к низкоуровневому программированию ... ведь никто не пытается сказать ничего против джампов в ассемблере
... и поскольку у Си С++ положение аморфное .... то GOTO живет там как засланец мышыных кодов!
давненько было помню как z0mbie в своей теории недектируемости вируса (делал попытки на Goto выстроить матрицу исполнения, которая по его мнению могла завести любую эвристику в ступор) ... делал он именно на GOTO ...  поэтому GOTO живет и будет жить ...
НО Я ГОВОРЮ НЕ О ВЕЩАХ УПРОЩАЮЩИХ ПОНИМАНИЕ, а наоборот 8)))) , вообще вопрос риторический должен ли антивирус понимать код вируса!
Последний раз редактировалось Retimiled; 25.12.2009 в 02:02..
|
|
|

25.12.2009, 02:03
|
|
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме: 6490435
Репутация:
2290
|
|
Код:
public TcpClient Connect(IPEndPoint host)
{
TcpClient client = new TcpClient();
int maxTryCount = 5;
tryAgain:
try
{
maxTryCount--;
client.Connect(host);
return client;
}
catch (SocketException)
{
if(maxTryCount>0)
goto tryAgain;//<-----
else
throw;
}
}
Код:
public TcpClient Connect(IPEndPoint host)
{
TcpClient client = new TcpClient();
for(int maxTryCount = 5; maxTryCount; maxTryCount--) {
try
{
client.Connect(host);
return client;
}
catch (SocketException) {}
}
throw;
}
|
|
|

25.12.2009, 02:05
|
|
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме: 2982851
Репутация:
107
|
|
Я иногда использую goto что бы неплодить ненужных вложенных циклов.
|
|
|

25.12.2009, 02:09
|
|
Познающий
Регистрация: 08.05.2009
Сообщений: 46
Провел на форуме: 1403678
Репутация:
55
|
|
Нынче в институтах учат, что применение goto - не кошерно, не тру и ваще отстой. Применение goto считается преступлением перед мировой общественностью.
Да, и в книгах об этом пишут, а ты не думал почему ? Может быть потому что многолетний опыт подсказывает что и правда лучше отказаться от goto ? Если бы было все так просто, то не создавали б другие циклы ( do..while, for, whlie )
Да, может быть именно в твоей ситуации goto и смотрится лучше, но в других случаях, как правило, это лишь усложняет программу, особенно если ее пишут "неопытные" программисты, которые скачут с goto по программе вдоль и поперек.
Поэтому, используй goto только тогда когда это НЕ ЗАПУТАЕТ код программы. Во 
|
|
|

25.12.2009, 02:11
|
|
Banned
Регистрация: 24.12.2009
Сообщений: 141
Провел на форуме: 487460
Репутация:
45
|
|
циклы могут выходить стандартными средствами не делая скачков и не делая ненужных проходов.... просто обычно люди сравнение в for(....;X<Y;....) делают одно а досточно описать флаг выхода и вы выйдите из любого количества циклов без лишних проходов.... for(....,ex=0;X<Y && ex==0;....)
Код:
for(....,ex=0;X<Y && ex==0;....)
for(....;K<L && ex==0;....)
for(....;M<N && ex==0;....)
....
for(....;F<G && ex==0;....)
if(BLABLA==TUTU)
ex=1;
|
|
|

25.12.2009, 02:17
|
Регистрация: 29.05.2002
Сообщений: 1,793
Провел на форуме: 2050916
Репутация:
0
|
|
Сообщение от nerezus
Код:
public TcpClient Connect(IPEndPoint host)
{
TcpClient client = new TcpClient();
for(int maxTryCount = 5; maxTryCount; maxTryCount--) {
try
{
client.Connect(host);
return client;
}
catch (SocketException) {}
}
throw; }
throw чего ?
|
|
|

25.12.2009, 02:38
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
Retimiled, вообще то глубокой вложенности нужно избегать - с помощью выделения кода в методы\функции, ибо глубоко вложенные циклы нечитабельное говно с любой стороны - что с goto, что с флагами, что с break/continue.
|
|
|

25.12.2009, 02:49
|
|
Banned
Регистрация: 24.12.2009
Сообщений: 141
Провел на форуме: 487460
Репутация:
45
|
|
2 Ra$cal
да .... если не заботишься об быстродействии и не отсчитываешь такты на PUSHA POPA , то конечно нужно оформлять в виде функций а как ты растащишь вот такой код
Код:
for(....,ex=0;X<Y && ex<10;....)
for(....;K<L && ex<9;....)
for(....;M<N && ex<8;....)
....
for(....;F<G && ex<1;....)
if(BLABLA==TUTU)
ex=8; // то есть я могу уйти в рамках цикла на люой уровень вложенности 8))
|
|
|

25.12.2009, 02:50
|
|
Reservists Of Antichat - Level 6
Регистрация: 23.08.2007
Сообщений: 1,237
Провел на форуме: 18127311
Репутация:
1676
|
|
В перле goto как будто медленнее работает, чем, например, redo.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|