Saturday, November 27, 2010

Сообщайте информацию о коде с помощью исключений

В больших системах над кодом работают не один и часто даже не десять программистов, а значительно больше. То что знает про код один разработчик, должны знать все другие. Механизм исключений позволяет сообщить дополнительную информацию о способах использования кода и сократить время отладки.
Например, есть некий метод
public void DoAction(int param)
{
  ... некие действия...
}
Разработчик этого кода знает, что вызов этого метода с параметром -1 не допустим, т. к. он приведет к зацикливанию. Конечно, он может написать комментарий к этому методу, где он может указать эту особенность. Но где гарантия, что другой разработчик, который использует этот код, прочитает это сообщение? Вероятнее всего, в случае зацикливания, он будет отлаживать код, найдет причину зацикливания, найдет, что это происходит именно в этом методе и только потом прочитает комментарий. Время будет потеряно. А ведь ничего не стоило сделать так:
public void DoAction(int param)
{
  if (param == -1)
    throw new AgrumentException("Нельзя вызывать этот метод с -1");
  ... некие действия...
}
Теперь если кто-то попытается вызвать этот метод с параметром -1 он точно узнает, что делать этого нельзя. Две строчки кода и экономия нескольких часов времени!
Я рекомендую всегда проверять значения параметров всех public‑метдов. Это позволит избежать затрат времени ваших коллег. Вот еще несколько примеров таких проверок.
public void DoAction(object param)
{
  if (param == null)
    throw new AgrumentNullException("param");
  ... некие действия...
}
public void DoAction(string param)
{
  if  string.IsNullOrEmpty(param)
    throw new AgrumentNullException("param");
  ... некие действия...
}

No comments: