3 типа ошибок программирования и как их избежать
Ошибки программирования – это изъяны в работе приложений. Их обычно называют «ошибками», отсюда и термин «отладка».
Как разработчик вы обнаружите, что тратите много времени на исправление ошибок. Ряд ошибок, с которыми вы столкнетесь, являются общими, и знание их поможет вам в первую очередь их предотвратить.
Вот что вам нужно знать об этих трех типах ошибок программирования и как от них защититься:
1. Выполнение или ошибки выполнения
Это ошибки, возникающие при выполнении программы (т. Е. Во время выполнения). Они могут привести к тому, что программа не будет выполняться должным образом или даже не запуститься вообще.
Фатальные ошибки времени выполнения приводят к остановке выполнения программы, в то время как нефатальные ошибки приводят к завершению выполнения, но с неверными результатами.
Типичная ошибка времени выполнения – это ошибка деления на ноль. Предполагается, что деление на ноль даст бесконечный результат, но, к сожалению, мы еще не придумали структуру данных, которая могла бы хранить такой объем данных.
Следовательно, деление на ноль приводит к арифметическому исключению в компиляторе Java.
2. Логические ошибки
Логические ошибки возникают из-за ошибочных рассуждений. Важно отметить, что эти ошибки не обязательно связаны с совершенной вами «ошибкой». Они могут возникнуть из-за того, что вы не учли определенный сценарий выполнения.
С ними труднее всего обращаться. Это связано с тем, что код с логической ошибкой является допустимой программой на языке, на котором он написан. Следовательно, он не вызовет ошибку компилятора. Единственная проблема в том, что он дает неверные результаты.
Фатальная логическая ошибка приведет к остановке выполнения программы, в то время как нефатальная ошибка позволит продолжить выполнение программы, но с неверными результатами.
Распространенная логическая ошибка – это ошибка нечеткости. Обычно это происходит при объявлении условия продолжения цикла. Допустим, вы хотите распечатать первые пять квадратных чисел.
Вы можете написать приведенный ниже код в своем цикле for, который дает только первые четыре таких числа.
for( int x=1; x<5; x++){ System.out.ln(x*x); }
Чтобы избежать такой ошибки, вместо этого можно использовать знак <=. Использование знака «меньше или равно» более интуитивно понятно, и поэтому вы с меньшей вероятностью перепутаете свои реляционные операции.
Другой распространенной логической ошибкой является отсутствие обеих фигурных скобок в операторе управления, но нижеследующее тело формирует блок кода, который находится под его контролем.
Посмотрите на пример ниже. Он проверяет, является ли случайное число четным или нечетным, а затем распечатывает результат.
import java.util.Random;
public class OddEven{
public static void main(String[] args) {
Random numberGenerator = new Random();
int randomNumber = numberGenerator.nextInt(10);
if ((randomNumber%2)==0)
System.out.println("Here is your lucky number :" + randomNumber);
System.out.println("The number "+ randomNumber +" that you got is even"); // line 11
}
}
Строка уведомления 11. Она будет выполняться всегда, независимо от того, четное ли полученное вами случайное число. Конечно, это было бы логически неправильно, если полученное вами число нечетное.
Включение обоих операторов System.out.println в фигурные скобки {} позволило бы избежать этого.
Другая логическая ошибка, на которую следует обратить внимание, – это отсутствие условия завершения цикла. Это приведет к бесконечному циклу, и ваша программа никогда не завершит выполнение.
3. Синтаксические ошибки или ошибки времени компиляции
Это ошибки, вызванные нарушением правил языка Java. Их также называют ошибками компиляции или ошибками времени компиляции.
С этими ошибками легче всего справиться, потому что ваш компилятор всегда сообщит о них. Многие компиляторы даже сообщают вам строку в коде, в которой произошла ошибка.
Отказоустойчивость
Практический способ решения проблем программного обеспечения – повысить отказоустойчивость путем включения обработки исключений. Для этого вы можете использовать операторы try..catch .
Чтобы продолжить выполнение программы независимо от исключения, пойманного в блоке catch , используйте оператор finally .
Синтаксис:
try{ // Block to execute if there are no issues }
catch (Exception e){
// Block to handle issues found
}finally{ // Block to execute after catch
}
См. Пример кода ниже:
import java.util.Random;
public class RandomNumbers{
public static void main(String[] args) {
Random numberGenerator = new Random();
try{
for (int counter = 10; counter<=100; counter++){
int randomNumber = numberGenerator.nextInt(10);
System.out.println(counter/randomNumber); } }
catch(Exception e){
System.out.println("Division by zero encountered!");
}
finally{
System.out.println("Infinite value got");}
}
}
Вышеупомянутая программа генерирует случайное число от нуля до 10, а затем использует это число для деления значения счетчика между 10 и 100. Если происходит деление на ноль, система обнаруживает ошибку и отображает сообщение.
Станьте лучше в программировании
Хорошая практика – добавлять комментарии к вашему коду. Это поможет вам легко прочесать ваши файлы, если у вас есть ошибка. Один небольшой, но очень важный шаг к развитию сильных практик программирования.
При правильной практике кодирования вы сможете избежать распространенных ошибок программирования.