Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Советы по хорошему стилю, начинающим гурятам от матёрых гурей :) 
:(
    Опции темы
JUncle
Дата 15.6.2007, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 6.4.2006
Где: Казань, РФ

Репутация: нет
Всего: 1



Цитата(RebornCrusader @  14.6.2007,  08:19 Найти цитируемый пост)
 охватывающие скобки "{}" в if следует ставить всегда, когда

Нет. Охватывающие скобки нужно ставить всегда!
Объяснение простое - тому, кто поддерживает код - будет гораздо легче вставить в блок какие-то операторы, чем сначала обрамлять в скобки, а потом... Да и от многих непоняток уберегает.

Цитата(nornad @  14.6.2007,  22:25 Найти цитируемый пост)
Кстати, к "исключительным" магическим числам, имхо, стоит отнести и -1 - очень часто это означает "неверный индекс/вариант".То есть, если 0 используется для проверки на пустоту списка (по количеству элементов), то не стоит его выносить в отдельное поле.Также и -1, если она используется, скажем, для определения, есть ли выделение в таблице (JTable.getSelectedRow(), например).

1 тоже можно отнести.
--------------------
class JUncle extends Man // singleton{/*...*/}
PM MAIL   Вверх
nornad
Дата 16.6.2007, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 16
Всего: 31



Цитата(JUncle @  15.6.2007,  23:30 Найти цитируемый пост)
1 тоже можно отнести. 

Можно тогда пример, в каких случаях 1 говорит сама за себя?


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
w1nd
Дата 16.6.2007, 02:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(nornad @  16.6.2007,  00:48 Найти цитируемый пост)
Можно тогда пример, в каких случаях 1 говорит сама за себя?

Код
// вытаскиваем поля из строки ResultSet
for (int i = 1; i <= count; i++) {
}

или
Код
// Рисуем
graphics.drawLine(x, y, x + width - 1, y + height - 1);

или
Код
// Делим jndi-имя
if (name.size() > 0) {
    remainingName = name.getSuffix(1);
    name = name.getPrefix(1);
}
else {
    remainingName = name.getSuffix(0);
    name = name.getPrefix(0);
}


И вообще, если о числах, то есть -N, -1, 0, 1, N. Всё, что N - выносится в константы, остальное - необязательно.


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
RebornCrusader
Дата 16.6.2007, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 18.1.2007
Где: Владивосток

Репутация: 2
Всего: 6



Цитата(JUncle @  16.6.2007,  04:30 Найти цитируемый пост)
Нет. Охватывающие скобки нужно ставить всегда!

Не согласен. Пожертвовав не значащими здесь деталями, приведу пример:
Код

public void setWidth(int width) {
    if (width < 0) throw new IllegalArgumentException();
    this.width = width;
}

ИЛИ
Код

public void setWidth(int width) {
    if (width < 0) {
        throw new IllegalArgumentException();
    }
    this.width = width;
}


Какой код, по-вашему читается легче? А если ещё подобных методов-сеттеров много?
И всегда ли могут быть другие операторы внутри if-а? Здесь вероятность крайне мала, да и исправить быстро, т. к. строчка короткая и простая. 

И вообще, никакой код не должен и не может учитывать всех возможных направлений расширения. Важно, чтобы наиболее вероятные и важные из них давались относительно легко. Всего нужно в меру и к месту.

--------------------
"Fais se que dois, - adviegne que peut. C'est commande au chevalier"
PM   Вверх
JUncle
Дата 16.6.2007, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 6.4.2006
Где: Казань, РФ

Репутация: нет
Всего: 1



Цитата(RebornCrusader @  16.6.2007,  11:22 Найти цитируемый пост)

И всегда ли могут быть другие операторы внутри if-а?
Здесь вероятность крайне мала, да и исправить быстро, т. к. строчка короткая и простая. 

А вот таких допущений приводить не нужно.
Нельзя с определенность сказать, как будут изменять код.
И сопротивляться изменению он не должен.


Цитата(RebornCrusader @  16.6.2007,  11:22 Найти цитируемый пост)
 А если ещё подобных методов-сеттеров много?

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

Цитата(RebornCrusader @  16.6.2007,  11:22 Найти цитируемый пост)
Какой код, по-вашему читается легче?

Второй вариант прекрасно читается, проблем не вижу.
О первый сразу спотыкаешься.

А вообще - спорить мне не хочется. Эти вопросы регламентирует документ компании об оформлении искходного кода.

Это сообщение отредактировал(а) JUncle - 16.6.2007, 16:59
--------------------
class JUncle extends Man // singleton{/*...*/}
PM MAIL   Вверх
w1nd
Дата 16.6.2007, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(RebornCrusader @  16.6.2007,  11:22 Найти цитируемый пост)
Какой код, по-вашему читается легче? 

Разумеется тот, который со скобками ;)


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Samotnik
Дата 16.6.2007, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



К примеру я придерживаюсь (стараюсь) "Хорошего стиля программирования" , а он гласит , что после оператора if должны быть скобки {...}.    ИМХО и читать понятно, и глазу привычней 
Вод!
PM MAIL   Вверх
Stampede
Дата 16.6.2007, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 24
Всего: 144



Цитата(JUncle @  15.6.2007,  11:30 Найти цитируемый пост)
Нет. Охватывающие скобки нужно ставить всегда!
Объяснение простое - тому, кто поддерживает код - будет гораздо легче вставить в блок какие-то операторы, чем сначала обрамлять в скобки, а потом... Да и от многих непоняток уберегает.


Полностью согласен с JUncle. Но рационализация (не знаю, блин, как это по-русски - rationalisation... обоснование, что ли) этой привычки у меня другая. Тут дело не в том, что кому-то когда-то может быть придется добавить операторов, и мы мол хотим облегчить им труд, с каковой целью заранее заключаем все в блок. Если бы дело было только в этом, то это как раз не было бы хорошей практикой, ибо относилось бы к категории "ранней (преждевременной) оптимизации", что не есть гуд.

Основная причина, по которой я тоже всегда заключаю условную часть в блок - это стремление к минимизации граблей. Дело в том, что не практике, и особенно в стиле "шустрого программирования" (agile programing), достаточно часто приходится заниматься рефакторингом, перекидывая и перекраивая куски кода. При этом нередко одиночный стейтмент превращается во множественный и наоброт, и если полагаться на безблочную запись, то можно по невнимательности запросто сломать логику работы условия. Особенно этому способствуют закомментирывания/раскомментирывания строк. Вот смотрите:

Код

if (field.isVisible())
    field.setWidth(DEFAULT_WIDTH);
redraw();


Но тут мы в какой-то момент решаем, что может быть ширину лучше оставить без изменений, и закомментирываем соответствующую строку:

Код

if (field.isVisible())
    // field.setWidth(DEFAULT_WIDTH);
redraw();


Хопа! Вот мы и наступили на грабли. Кто хочет сказать, что уж он-то точно никогда так не лажанется, пусть первый бросит в себя камень smile

Короче, подводя черту. При виде безблочного стейтмента в условии у меня сразу возникает чувство, что где-то в тылу заложена мина замедленного действия. И пока я его не исправлю, у меня так и будет "сосать под ложечкой" smile А уж при написании собственного кода так вообще создаю блок "на автомате". Поверьте, это гораздо проще, чем каждый раз думать, один ли здесь будет стейтмент или несколько.

А про читабельность я уж и не говорю smile

Это сообщение отредактировал(а) Stampede - 16.6.2007, 22:44


--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
v2v
Дата 16.6.2007, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 8
Всего: 56



Stampede, привёл очень хороший пример.
Я и сам
Цитата

А уж при написании собственного кода так вообще создаю блок "на автомате".

Что и другим рекомендую.
...
Но я начинаю изучать Java переходя с С++(#) и мне не понятна следующее размещение этих самых скобок: 
Код

if (width < 0) {
   // do something    
   System.out.println("Data error!");
}

Помоему вот так удобней:
Код

if (width < 0) 
{
  // do something   
  printf("Data error!");
}

Почему в ява первая скобка не пишется с новой строки? И при просмотре кода проще контролировать где "потерялася" какая то скобка.


--------------------
PM   Вверх
nornad
Дата 16.6.2007, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 16
Всего: 31



Цитата(v2v @  17.6.2007,  01:56 Найти цитируемый пост)
Почему в ява первая скобка не пишется с новой строки?

а) Java - язык этих самых скобок. smile Постоянные методы, именованные и безымянные классы, блоки в if/for/while/и т.п. - всё это так нагружает код "лишними" скобками, что зачастую люди ставят открывающую на той же строке, что и оператор-владелец. Так немного больше кода на экран помещается.
б) привычка. Я поначалу тоже не мог привыкнуть к такому виду, а сейчас привык. Чаще пишу в "жабовском" стиле, но если условие многострочное - открывающая скобка у меня обязательно есть и стоит на новой строке.


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
Samotnik
Дата 17.6.2007, 01:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Цитата(v2v @  16.6.2007,  22:56 Найти цитируемый пост)
Почему в ява первая скобка не пишется с новой строки?

Ну почему же, я всегда пишу с новой строки(скорее всего тоже с С/С++ осталось) !
PM MAIL   Вверх
RebornCrusader
Дата 17.6.2007, 02:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 18.1.2007
Где: Владивосток

Репутация: 2
Всего: 6



Цитата(Stampede @  17.6.2007,  06:42 Найти цитируемый пост)
 При этом нередко одиночный стейтмент превращается во множественный и наоброт, и если полагаться на безблочную запись, то можно по невнимательности запросто сломать логику работы условия. Особенно этому способствуют закомментирывания/раскомментирывания строк. Вот смотрите:

Именно эту мысль я никак не мог выразить! Когда условие и выполняющийся оператор стоят в одной строке, я считаю превращение оператора в блок из одного излишним - комментировать также просто и надёжно. Но, согласен, это дело вкуса и политики организации.

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

Одну строчку отследить легко, перенос - уже труднее, поэтому и требуется соответствующее оформление. Имено поэтому я не могу полюбить Питон, из-за его "бесскобочной " вложенности. Главное в программе - читаемость кода. А уж скобочки добавить всегда просто. Может я зажрался, но IDEA делает это почти сама ;)


На счёт скобки в отдельной строки - вредная привычка C, с которой переучиваешься за месяц, тем паче при наличии автостилизации в IDE. Корни привычки, на мой взгляд, лежат ещё в Pascal - уж там эти страшные beginы в переносить на нову строчку куда приятнее. И наконец, скобка на новой строке использовалась для комментария к функции:
Код

void doSomething(int a)
{ // здесь куча места для комментария к функции



В Java нужда в этом отпадает, так как есть javadoc

Добавлено @ 02:29
Цитата(w1nd @  17.6.2007,  03:16 Найти цитируемый пост)
Разумеется тот, который со скобками ;)

Вот и причина разногласий ;) У каждого в глубине души свои представления о прекрасном ;)

Добавлено через 10 минут и 25 секунд
Цитата(v2v @  17.6.2007,  06:56 Найти цитируемый пост)
Почему в ява первая скобка не пишется с новой строки? И при просмотре кода проще контролировать где "потерялася" какая то скобка.

(Я тоже сталкивался с таким мнением.)
Потому что при правильной стилизации на этом уровне вложенности стоит заголовок соответствующего метода. Находится быстро, дело привычки.

Это сообщение отредактировал(а) RebornCrusader - 17.6.2007, 02:33
--------------------
"Fais se que dois, - adviegne que peut. C'est commande au chevalier"
PM   Вверх
FcUK
Дата 18.6.2007, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 22.2.2007

Репутация: нет
Всего: 1



чесно говоря..все это хорошо....но есть  Code Conventions for the JavaTM Programming Language написан в далеком 1999 году + есть Maintainability Index програмы...если он больше 100 - значит код хорошый..если менше - увы...
PM MAIL   Вверх
niasilil
Дата 18.6.2007, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 4.6.2007
Где: USA

Репутация: 8
Всего: 9



Цитата(FcUK @ 18.6.2007,  18:07)
чесно говоря..все это хорошо....но есть  Code Conventions for the JavaTM Programming Language написан в далеком 1999 году + есть Maintainability Index програмы...если он больше 100 - значит код хорошый..если менше - увы...

гы, "Сказано пацакам в клетке выступать, значит надо в клетке. Чё выпендриваетесь? " 

Добавлю. 
Для eclipse есть очень Checkstyle плагин, который подсказывает что не так. Рекомендую. 


--------------------
SCJP 5.0, SCJD
PM MAIL   Вверх
nornad
Дата 18.6.2007, 20:18 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 16
Всего: 31



Цитата(FcUK @  18.6.2007,  21:07 Найти цитируемый пост)
но есть  Code Conventions for the JavaTM Programming Language

Документ неплохой, но там тоже далеко не все моменты проясняются. А посему, в этой теме давайте не будем спорить по поводу того, как кому удобнее и красивше код писать (это я про те же скобочки), а либо давать рекомендации по объективно хорошему стилю, либо снабжать различные "имхо" соответствующими пометками (дабы меньше запутывать начинающих).


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1388 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.