23.02.2008, 19:37 | #1 |
Участник
|
mfp: Writing less code: The "else" statement
Источник: http://blogs.msdn.com/mfp/archive/20...statement.aspx
============== Source code is written once; and read over and over again. So make sure it is easy to read and understand. I keep seeing a poor coding practice. I see it in production code, in test code, in X++ code, in C# code, in C++ code, in examples on the web, when interviewing candidates. I see it where ever I look. It is a practice that adds unnecessary complexity to source code, it make the source code harder to read, and harder to write. And what disturbs me the most is, how easy it is to avoid. Take a look at this simple code: <DIV class=source>boolean isNegative(int value) { if (value
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору. |
|
23.02.2008, 22:16 | #2 |
Участник
|
это замечательный призыв.
надо учитывать только две вещи: 1. корректная работа при обработке исключений 2. корректная работа внутри транзакционных скобок ttsbegin-ttscommit/ttsabort Поэтому без-else-овую оптимизацию, по-моему, рационально делать только в простейших случаях, когда в каждой ветке делается return. Кроме того, в таких простейших случаях без-else-овый код должен выглядеть так X++: int foo(int bar) { if ( /*expr1*/ ) throw /*some exception*/; if ( /*expr2*/ ) return 1; if ( /*expr3*/ ) return 2; if ( /*expr4*/ ) return 3; doSomething or throw /*some exception*/; } См. также книгу Мартина Фаулера про Рефакторинг существующего кода http://www.ozon.ru/context/detail/id...?partner=mazzy или скачать эту книгу бесплатно, если предпочитаете читать в электронном виде http://www.proklondike.com/contentview.php?content=258 |
|
24.02.2008, 15:03 | #3 |
Участник
|
Цитата:
Сообщение от mazzy
Кроме того, в таких простейших случаях без-else-овый код должен выглядеть так
X++: int foo(int bar) { if ( /*expr1*/ ) throw /*some exception*/; if ( /*expr2*/ ) return 1; if ( /*expr3*/ ) return 2; if ( /*expr4*/ ) return 3; doSomething or throw /*some exception*/; } Eсли не нравятся Best Practices - напишите свою Аксапту, с блекджеком и шлюхами. |
|
24.02.2008, 17:19 | #4 |
Участник
|
Хм. Я считаю, что Best Practice - это конечно хорошо, но это не панацея.
И если код получается более читабельным (объективно) при небольшом нарушении BP, то так тому и быть. |
|
24.02.2008, 21:21 | #5 |
Участник
|
согласен.
|
|
24.02.2008, 22:51 | #6 |
Участник
|
|
|
24.02.2008, 23:09 | #7 |
Участник
|
Цитата:
тема блога - как сделать текст более читабельным для человека за счет отказа от "ненужных" else |
|
25.02.2008, 00:56 | #8 |
Member
|
Цитата:
Сообщение от kashperuk
...
И если код получается более читабельным ... Сравните. X++: ... if (x < 0) throw error ("Error"); if (x == 0) return true; ... X++: ... // GLIBS: Some modification --> // if (x < 0) throw error ("Error"); if (x < 0) { this.doSomething(); throw error ("Error"); } // GLIBS: Some modification <-- if (x == 0) return true; ... X++: ... if (x < 0) { throw error ("Error"); } if (x == 0) { return true; } ... X++: ... if (x < 0) { // GLIBS: Some modification --> this.doSomething(); // GLIBS: Some modification <-- throw error ("Error"); } if (x == 0) { return true; } ... Если комментировать, то очень тяжело пользоваться функцией сравнения кода. Так что mono прав, IMHO. А ВР нужно соблюдать.
__________________
С уважением, glibs® |
|
|
За это сообщение автора поблагодарили: oip (4). |
25.02.2008, 01:05 | #9 |
Участник
|
Вот ведь тема эволюционировала...
Цитата:
Цитата:
glibs, я же написал "только в простейших случаях, когда в каждой ветке делается return.". Если вставляется оператор до return'а, а программист не проконтролировал скобки, то... это скорее говорит о неопытности программиста, нежели о Best Practice. Цитата:
X++: ... if (x < 0) { this.doSomething(); throw error ("Error"); } // GLIBS: Some modification -- if (x == 0) return true; ... И в этом случае очень хорошо, что сравнение покажет значительные изменения. Обсуждение обязательности скобок идет еще со времен появления структурного программирования, С и Паскаля. Сколько копий было сломано в свое время. Вот уж не ожидал, что эта "священная война" разгорится снова. Ок. Перехожу в режим чтения этой ветки. |
|
25.02.2008, 01:17 | #10 |
Member
|
Цитата:
Сообщение от mazzy
...
я же написал "только в простейших случаях, когда в каждой ветке делается return.". ... Цитата:
Сообщение от mazzy
...
я же написал ... Если вставляется оператор до return'а, а программист не проконтролировал скобки, то... это скорее говорит о неопытности программиста, нежели о Best Practice. ... Например, ERP системы внедряют для снижения человеческого фактора и зависимости от личностей... я склонен к чему-то подобному в кодировании. Цитата:
Сообщение от mazzy
...
Перехожу в режим чтения этой ветки. ...
__________________
С уважением, glibs® |
|
25.02.2008, 01:21 | #11 |
Участник
|
Цитата:
ну, дык. Усложни код, когда он усложнится. Заранее то зачем? |
|
25.02.2008, 01:25 | #12 |
Member
|
Цитата:
Сообщение от mazzy
...
Ок. Перехожу в режим чтения этой ветки. ... Цитата:
Сообщение от mazzy
...
тема блога как раз о том ...
__________________
С уважением, glibs® |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
25.02.2008, 11:05 | #13 |
Участник
|
я бы скобок не ставил, а переносы бы делал.
|
|
25.02.2008, 11:50 | #14 |
Member
|
Если писать Аксапту почти "с нуля", то не принципиально. Согласен.
__________________
С уважением, glibs® |
|
25.02.2008, 15:28 | #15 |
Участник
|
ну, вот снова ловко изменил тему: было "как сделать код более читаемым", стало "надо ли переписывать с нуля".
|
|
25.02.2008, 17:54 | #16 |
Member
|
Цитата:
Сообщение от mazzy
...
ну, вот снова ловко изменил тему ... Я вовсе не менял тему, а лишь просил всех участников обратить внимание на тот нюанс, что код в Аксапте не всегда является статическим. И то, что я сейчас напишу красиво и понятно, может начать смотреться очень уродливо после того, как кому-то потребуется доработать мой код. Т.е. я предлагал взглянуть на проблему не в статике, а в динамике. Тема та же. Читабельность кода.
__________________
С уважением, glibs® |
|