Стереотипы: goto
Недавно один мой знакомый был повергнут в шок, увидев в моем коде оператор 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;
}
}
|