ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

25.12.2009, 03:08
|
|
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме: 6490435
Репутация:
2290
|
|
А хз ) Синтаксиса не помню уже ) Но там переписать не сложно без goto с меньшими затратами =)
Не дотнетчик я - импровизировал )
|
|
|

25.12.2009, 11:27
|
Регистрация: 29.05.2002
Сообщений: 1,793
Провел на форуме: 2050916
Репутация:
0
|
|
Сообщение от nerezus
Но там переписать не сложно без goto с меньшими затратами =)
Ну не знаю, мне например в голову не приходит как там переписать без goto с меньшими затратами 
|
|
|

25.12.2009, 11:32
|
Регистрация: 29.05.2002
Сообщений: 1,793
Провел на форуме: 2050916
Репутация:
0
|
|
Сообщение от Ra$cal
Retimiled, вообще то глубокой вложенности нужно избегать - с помощью выделения кода в методы\функции, ибо глубоко вложенные циклы нечитабельное говно с любой стороны - что с goto, что с флагами, что с break/continue.
В целом да, так и есть. Но опять же есть специфические случаи, когда это очень геморно. В основном из-за того что нужно передавать кучу параметров в такую функцию. Да и семантика такой функции не всегда понятна (К примеру, при перемножении матриц нужно делать три вложенных цикла, если два из них вынести в функцию, то как назвать такую функцию? func1() ?  ).
|
|
|

25.12.2009, 12:39
|
|
Leaders of Antichat - Level 4
Регистрация: 02.06.2005
Сообщений: 1,411
Провел на форуме: 10605912
Репутация:
4693
|
|
Я бы вынес проверку одной матрицы на наличие нуля в отдельную функцию и делал бы return true если бы встретился хотя бы один ноль. А общий цикл оформил бы примерно так (псевдокод):
Код:
public boolean checkMatrix(Matrix m) {
for(List list: m) {
if(!checkForZeroValue(list))
return false;
}
return true;
}
private boolean checkForZeroValue(List list) {
for(Item i: list)
if(встретился_ноль) return true;
return false;
}
Читабельность имхо выше, чем всякие разные метки искать. Ну а в целом, я иногда использую continue; но никогда не приходилось использовать goto.
__________________
Я отдал бы немало за пару крыльев,
Я отдал бы немало за третий глаз
За руку на которой четырнадцать пальцев
Мне нужен для дыхания другой газ..
Мой блог: http://qwazar.ru/.
Последний раз редактировалось Qwazar; 25.12.2009 в 12:45..
|
|
|

25.12.2009, 12:52
|
|
Познавший АНТИЧАТ
Регистрация: 13.04.2006
Сообщений: 1,738
Провел на форуме: 5151669
Репутация:
1198
|
|
Сообщение от Algol
Недавно один мой знакомый был повергнут в шок, увидев в моем коде оператор goto. Попытки объяснить что не все так плохо не были восприняты
Нынче в институтах учат, что применение goto - не кошерно, не тру и ваще отстой. Применение goto считается преступлением перед мировой общественностью.
Жаль только, что ВУЗы не учат тому, что каждому овощу - свое блюдо.
Ни в коей мере не преувеличивая важность goto, приведу все же два примера, в которых решение без goto было бы некрасиво и сложнее для восприятия:
C#
Код:
/// <summary>
/// Функция проверяет, что во всех матрицах есть хотя бы один нуль
/// </summary>
/// <param name="listOfMatrix"></param>
/// <returns></returns>
public bool HasZero(List<int[,]> listOfMatrix)
{
foreach (int[,] matrix in listOfMatrix)
{
for (int i = 0; i < matrix.GetLength(0); i++)
for (int j = 0; j < matrix.GetLength(1); j++)
if(matrix[i, j] == 0)
goto nextMatrix;//<-----
return false;
nextMatrix: ;
}
return true;
}
C#
Код:
/// <summary>
/// Создание tcp-сокета, с несколькими попытками подключения
/// </summary>
/// <param name="host"></param>
/// <returns></returns>
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;
}
}
помню-помню когда-то в школе использовал его) но это была только одна задача) а прошло уже много лет)
п.с. о вкусах не спорят) если тебе так удобнее почемубы и нет) в бою все средства...
|
|
|

25.12.2009, 12:58
|
|
Leaders of Antichat - Level 4
Регистрация: 02.06.2005
Сообщений: 1,411
Провел на форуме: 10605912
Репутация:
4693
|
|
Сообщение от Sn@k3
помню-помню когда-то в школе использовал его) но это была только одна задача) а прошло уже много лет)
п.с. о вкусах не спорят) если тебе так удобнее почемубы и нет) в бою все средства...
В данном случае о вкусах спорят, т.к.:
1) Этот код будет разбирать не только автор
2) Возможно даже через несколько лет.
__________________
Я отдал бы немало за пару крыльев,
Я отдал бы немало за третий глаз
За руку на которой четырнадцать пальцев
Мне нужен для дыхания другой газ..
Мой блог: http://qwazar.ru/.
|
|
|

25.12.2009, 14:36
|
Регистрация: 29.05.2002
Сообщений: 1,793
Провел на форуме: 2050916
Репутация:
0
|
|
Сообщение от Qwazar
А общий цикл оформил бы примерно так (псевдокод):
Псевдокод это конечно хоршо и кошерно, но реальные программы пишутся не на псевдокоде.
Я же привожу конкретные примеры, в котором метка - самое простое и наглядное решение.
Сообщение от Qwazar
Читабельность имхо выше, чем всякие разные метки искать. Ну а в целом, я иногда использую continue; но никогда не приходилось использовать goto.
Странно, у меня continue чуть ли не в каждом втором цикле.
Но в целом точка зрения ясна.
|
|
|

25.12.2009, 18:03
|
|
Leaders of Antichat - Level 4
Регистрация: 02.06.2005
Сообщений: 1,411
Провел на форуме: 10605912
Репутация:
4693
|
|
Сообщение от Algol
Псевдокод это конечно хоршо и кошерно, но реальные программы пишутся не на псевдокоде.
Я же привожу конкретные примеры, в котором метка - самое простое и наглядное решение.
Моё решение более наглядно, не запутаешься во вложенных циклах, и не придётся смотреть по коду, где находится метка, на которую ты скачешь. Да и псевдокод очень даже приближен к реальности 
__________________
Я отдал бы немало за пару крыльев,
Я отдал бы немало за третий глаз
За руку на которой четырнадцать пальцев
Мне нужен для дыхания другой газ..
Мой блог: http://qwazar.ru/.
|
|
|

25.12.2009, 18:37
|
|
Leaders of Antichat - Level 4
Регистрация: 16.01.2006
Сообщений: 1,966
Провел на форуме: 21768337
Репутация:
3486
|
|
Сообщение от Algol
Недавно один мой знакомый был повергнут в шок, увидев в моем коде оператор goto.
Увидев первый сурс я тоже был повергнут в шок 
|
|
|

25.12.2009, 23:06
|
Регистрация: 29.05.2002
Сообщений: 1,793
Провел на форуме: 2050916
Репутация:
0
|
|
Сообщение от .Slip
Увидев первый сурс я тоже был повергнут в шок 
Ээ... Ну это понятно, а что-то по обсуждаемой теме есть 
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|