PDA

Просмотр полной версии : О стиле написания кода


Fogflasher
07.10.2013, 12:28
Встречалось, в общем, два типа написания кода в AS3.0.

Вариант 1, с отступами, например:

private function removeText(e:Event)
{
if (infoPanel.contains(infoPanel.message_dtx))
{

trace("Removing text...");
infoPanel.removeChild(infoPanel.message_dtx);
}
else
{
trace("Nothing to remove!");
}
}


Вариант 2, сжатый, например:
private function removeText(e:Event){
if (infoPanel.contains(infoPanel.message_dtx)){

trace("Removing text...");
infoPanel.removeChild(infoPanel.message_dtx);}
else{
trace("Nothing to remove!");}
}

Мне, как новичку, первый кажется более понятным и эргономичным.
А второй - ненужной шифрованной непоняткой.

Однако, не редко, книги по AS3.0 написаны как раз во втором стиле.
А также многие продвинутые юзеры этого форума, тоже пишут во втором стиле.

Интересно, с чем это связано? Почему второй стиль существует, и зачем его использовать?
Или может с опытом приходит другое виденье кода, и стиль уже не важен (а значит второй чуть проще, форматировать не надо).
В книгах, в прочем, могу предположить, что так страницы экономить лучше, меньше строк выходит.

caseyryan
07.10.2013, 12:36
Первый называется стиль Олмана.
Вообще, я лично всегда использую второй, потому, что он менее громоздкий и удобочитаемый. Хотя тут какой-то корявый вариант. Закрывающая скобка в любом случае должна переноситься на следующую строку. Иначе все выглядит как каша.

Zebestov
07.10.2013, 12:39
Первый вариант тоже кривой — зачем два лишних tab-а в теле метода?

Добавлено через 2 минуты

private function removeText(e:Event):void // void забыл указать
{
if (infoPanel.contains(infoPanel.message_dtx)) // это не гарантия того,
{
trace("Removing text...");
infoPanel.removeChild(infoPanel.message_dtx); // что тут не вылетит ошибка в рантайме
}
else
{
trace("Nothing to remove!");
}
}

Wolsh
07.10.2013, 12:59
Или может с опытом приходит другое виденье кода, и стиль уже не важен скорее, новички не думают о стиле; "с опытом" же начинаешь даже читать книги, посвященные исключительно стилю написания кода.
(а значит второй чуть проще, форматировать не надо).В нормальных редакторах кода все настраивается и форматируется автоматически, да и сниппеты создаются сразу в нужном форматировании.
30084

mikhailk
07.10.2013, 13:09
Интересно, с чем это связано? Почему второй стиль существует, и зачем его использовать?

На самом деле, понятие "стиль" несколько шире понятия "язык программирования" и в определенном смысле выбор того или иного стиля определяется языком, его логикой и его конструкциями.

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

Но это сугубо имхо.

Akopalipsis
07.10.2013, 13:18
А мне кажется все ещё более просто - первый вариант, это настройки по умолчанию FD,FB.
А второй, это настройки по умолчанию CC.
но если начинаешь писать также на JS
Если не ошибаюсь, а я не ошибаюсь, просто не могу вспомнить, в JS если не писать как во втором примере,
то есть случай, когда будет ошибка.

Fogflasher
07.10.2013, 14:48
All, в целом понятно, спасибо. Ну я писал варианты навскидку, поэтому оба кривоватые.

Zebestov, а если void поставить, то гарантия не-вылета в рантайме появляется?
Или надо еще что-то добавить?

Zebestov
07.10.2013, 14:56
Или надо еще что-то добавить?
Скорее изменить.

Вместо такой проверки
if (infoPanel.contains(infoPanel.message_dtx)) {…}

в самом общем случае следует проверять так
if (message_dtx.parent && message_dtx.parent == infoPanel) {…}

потому что (http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/display/DisplayObjectContainer.html#contains())
Нижестоящие элементы второго, третьего и последующих уровней возвращают значение true.

Следовательно, нахождение message_dtx где-то в контейнере infoPanel — когда contains() вернет true — не гарантирует, что infoPanel является непосредственным родителем message_dtx.

Fogflasher
07.10.2013, 15:32
Спасибо, идею понял.

Хотя у меня в таком виде ошибку выдает.
1120: Access of undefined property message_dtx.
Изменил вот так:
if (infoPanel.message_dtx.parent && infoPanel.message_dtx.parent == infoPanel)
Так работает.

expl
07.10.2013, 18:39
Мне, как новичку, первый кажется более понятным и эргономичным.
А второй - ненужной шифрованной непоняткой.
Второй("египетский", "единственно верный") позволяет уместить больше строчек на экране.
Тут то как раз всё понятно, если бы большинство as3-проектов не было написано бы в стиле Олмана - я бы в египетском и писал.

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

Египетский стиль обычно используют Java-программисты,
стиль со скобочкой на новой строке - С/C++/C# - программисты

Flex написан в стиле Олмана, большинство либ для as3 написано в этом же стиле. Так что для AS3 кодера выбора практически нет - пишем скобку на новой строке.

Update:
Невнимательно просмотрел, то что вы привели - это не египетский стиль, это действительно что-то страшное, я только один раз такое видел и то в левых исходниках, с которыми не надо было работать O_o,
А вот египетский стиль, который используют яверы, выглядит так:
private function removeText(e:Event) {
if (infoPanel.contains(infoPanel.message_dtx)) {
trace("Removing text...");
infoPanel.removeChild(infoPanel.message_dtx);
} else {
trace("Nothing to remove!");
}
}

caseyryan
07.10.2013, 18:45
Так что для AS3 кодера выбора практически нет - пишем скобку на новой строке.

Я ломаю систему, пишу скобку на той же строке :D И мне пофиг)

AlexCooper
07.10.2013, 19:06
Я ломаю систему, пишу скобку на той же строке :D И мне пофиг)

я тоже так пишу, кроме switch и иногда if )

caseyryan
07.10.2013, 20:27
а я всегда)

СлаваRa
07.10.2013, 21:28
Только египетские.

MikroAcse
07.10.2013, 21:28
пишу скобку на той же строке
Это как-то... неправильно что ли.

caseyryan
07.10.2013, 21:53
По мне так наоборот правильно. Не правильно - это когда код как огромное полотенце, и при этом на экране всего 5 - 6 рабочих строк за раз. В моем понимании, чем больше строк я вижу на экране, тем лучше.
Так же терпеть не могу размашистые и/или бессмысленные комментарии, типа

/*
************************
* private
************************
*/

MikroAcse
07.10.2013, 21:55
caseyryan, ясно, ну это уже дело вкуса.
Я, например, кашу эту Вашу не понимаю и мне нужно больше времени, чтобы ее понять.
А вот своё "полотенце" мне легче понять.
Но и сильно много отступов я тоже не приветствую.

expl
07.10.2013, 22:18
Я ломаю систему, пишу скобку на той же строке И мне пофиг)
Дело не в системе.
Дело в том что ваши нейроны, ответственные за чтение кода привыкнут к скобке на той же строке, а 80% кода всяких либ и примеров в бложиках написано со скобкой на новой строке
Т.е. будет тяжелее читать чужой код.

Inet_PC
07.10.2013, 22:31
Пишу по стандартам от Adobe (http://sourceforge.net/adobe/flexsdk/wiki/Coding%20Conventions/), то бишь, скобка на следующей строке. Египетские не переношу, но, если стандарт будет требовать, то буду ...(

Dukobpa3
08.10.2013, 20:25
Люблю олмана, начинаю привыкать к египетским скобкам.
Мотивация проста:
- люблю олмана:) За понятность читаемость удобство, и собственно готов продвигать это везде и всюду.
- а вот египетские удобнее фолдить. И в последнее время пристрастился к фолдам благодаря идее. Открываю класс и всё красивенько столбиком каждая функция в одной строчке. Но мне кажется это вопрос выбора IDE. Если IDE научатся грамотно сворачивать код в одну строку понимая что скобка не сама по себе а продолжение чего-то и свернутый блок визуально переносить в ту же строку после его заголовка - буду писать стилем олмана:)