Изящнее, изящнее, господа программисты

В поисках решений при написании программ на языке Java попадаются иногда удивительные перлы.


  public void createDataBase() throws IOException{
  	boolean dbExist = checkDataBase();
 
    	if(dbExist){
    		//do nothing - database already exist
    	}else{
                // Многа букаф кода...
        }
 }

Нет, в целом код работающий и вполне подходящий, за что хочется сказать зарубежным коллегам искреннее спасибо. Однако давайте попробуем слегка оптимизировать вот этот конкретный метод.
Во-первых, зачем заводить логическую переменную, если она используется всего один раз? Отказываемся:


  public void createDataBase() throws IOException{
 
    	if(checkDataBase()){
    		//do nothing - database already exist
    	}else{
                // Многа букаф кода...
        }
 }

Во-вторых, зачем нам пустой блок после if? Может лучше применить инверсию, чем плодить фигурные скобки?

  public void createDataBase() throws IOException{
 
    	if(!checkDataBase()){
                // Многа букаф кода...
        }
 }

Вот, так можно было бы и оставить. Однако на мой вкус фигурных скобок всё еще много. Я обычно считаю, что если какое-то условие не выполнено, то и делать здесь больше нечего:


  public void createDataBase() throws IOException{
  	if(checkDataBase()){
              return;
        }
        // Многа букаф кода...
 }

Если после if() идет всего один оператор, то фигурные скобки можно не ставить. Хотя во многих учебных заведениях требуют от студентов, чтобы ставили и в таких случаях, т.к. с этим связан ряд ошибок у начинающих программистов. Я же за свою практику сталкивался с такими ошибками всего один раз (кстати, недавно) и считаю, что не ставить фигурные скобки в таких случаях — большое удобство. К тому же тратить на короткий оператор return целую строку кода тоже, по-моему, роскошь. «Лохматость» нужно снижать, а не повышать:


  public void createDataBase() throws IOException{
  	if(checkDataBase()) return;
        // Многа букаф кода...
 }

Так-то гораздо понятнее. А еще я бы переименовал метод checkDataBase(), из названия которого непонятно, проверяется ли наличие базы данных или ее целостность и при каких условиях возвращается true, в dataBaseExists(). Тогда программа получилась бы практически на обычном английском языке:


  public void createDataBase() throws IOException{
  	if(dataBaseExists()) return;
        // Многа букаф кода...
 }


Добила меня еще одна строка в конце той страницы:
return checkDB != null ? true : false;

Видимо, просто сказать
return checkDB != null;

религия (Индуизм?) не позволяет
  • +12
  • 10 января 2011, 00:05
  • yababay

Комментарии (2)

RSS свернуть / развернуть
+
0
оптимизация фигли
avatar

Sergei_T

  • 10 января 2011, 09:25
+
0
Интересно, полезно.
avatar

Markony

  • 10 января 2011, 18:26

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.