Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Какой код лучше? Копактный, сложный или длинный, простой?

16K
05 января 2007 года
WandM
46 / / 13.11.2006
Вычитал на форуме по Паскалю:
kerdan:
Цитата:
поверьте, лучше две чем пять.
если привыкнуть писАть компактный код, то потом если будете
изучать не компактный то будут возникать такие ситуации:
смотришь, смотришь, 1,2,3,5 строка и понимаешь - на хрен этот
ламер такую хрень расписывает на столько строк???

мозги со временем выработают дополнительные извилины, которые ни
кому еще не помешали и вам станет удобнее смотреть и писАть маленький код с высокой смысловой нагрузкой.


Флудить на эту тему там не хочу, поэтому спрашиваю здесь.

Какой код лучше? Копактный, но сложный или длинный, но простой?
Сейчас, при программировании на Яве я пользуюсь парадигмой KISS. Достаточно простые участки кода приходится расписывать на несколько строк. Зато, сразу понятно, что делает тот или иной кусок кода.

Ваше мнение?

Страницы:
13
05 января 2007 года
RussianSpy
3.0K / / 04.07.2006
Смотря для чего...
Для скриптовых языков вроде JavaScript, ActionScript - чем код меньше тем лучше (экономия трафика все таки)...
Для всех остальных языков ИМХО важнее чтобы код был эффективным и хорошо читался...
Не думаю что при компиляции в С++ будет сильно заметна разница между длинным x = x +1; и коротким x++;
267
05 января 2007 года
Cutty Sark
1.2K / / 17.10.2002
Всегда пишу программы так, чтобы их мог прочитать другой человек. Поэтому на длине кода не экономлю. Куча комментариев, максимально ясная структура и т.п.
2
05 января 2007 года
squirL
5.6K / / 13.08.2003
лучше всего - работающий код :)
а вообще - по ситуации. я пишу в основном на perl, где возможности по написанию компактного кода просто неограничены. но надо не забывать и о тех, кому придется потом это разбирать ;) и, кстати, опрос некорректен. компактный код != сложный.
252
05 января 2007 года
koderAlex
1.4K / / 07.09.2005
лучший код - короткий и простой )
267
05 января 2007 года
Cutty Sark
1.2K / / 17.10.2002
Цитата: squirL
и, кстати, опрос некорректен. компактный код != сложный.



Давай приведём конкретный пример. Сишный оператор присваивания позволяет в одной строчке изменить значения сразу нескольких переменных да ещё и с условиями. Возьмём школьный пример - решение квадратного уравнения.
Можно записать в одной строчке сразу и вычисление дискриминанта, и проверку его и т.д. вплоть до получения корней. А можно "по-школьному":
d = ...
if ...
...
else
...

Вот товарищ WandM и интересуется - кто что предпочитает.

263
05 января 2007 года
koltaviy
816 / / 16.12.2004
Опрос не то, что некорректен..
Опрос, ИМХО, неуместен..
Все зависит от языка, во-первых.. и от того, что ты(мы/они :)) считаешь "понятным" кодом..
Классический, хоть и не сказать, что супер-жизненный пример:
Изменение состояния "RadioButton" по нажатию кнопки:
 
Код:
..
rbMine.Checked = !rbMine.Checked;
..

А не:
 
Код:
..
if (rbMine.Checked)
    rbMine.Checked = false;
else
    rbMine.Checked = true;
..

Для меня лично спорно, какой из вариантов "лучше".. Так, что все зависит..:)
242
05 января 2007 года
Оlga
2.2K / / 04.02.2006
в твоем примере помоему спорить не о чем, первый вариант лучше, а вообще тоже считаю опрос некорректным, всё зависит от ситуации. примерчик о кратком коде.
257
05 января 2007 года
kosfiz
1.6K / / 18.09.2005
то, какой код будет написан зависит прежде всего от цели написания. если пишется для кого-то и особенно в целях обучения, то лучше конечно использовать длинный код, чтобы "разжевать" все до мелочей, а для тех кто из этого уже "вырос" большой трудности не составит переделать в более компактный, т.е. код будет доступен для понимания почти всем, обратное утверждение здесь будет неверно.
если пишешь для себя, то писать надо как тебе удобнее.
63
05 января 2007 года
Zorkus
2.6K / / 04.11.2006
[quote=OlgaKr] примерчик о кратком коде.[/quote]
Если уж браться писать такое, то надо знать все о своем компилере.
И единственно, чтобы запутать тех кто будет пытаться дизассемблировать:D
10
05 января 2007 года
Freeman
3.2K / / 06.03.2004
Цитата: koderAlex
лучший код - короткий и простой )


Согласен, была уже тема.

261
05 января 2007 года
ahilles
1.5K / / 03.11.2005
разумеется короткий и сложный
экономия места на диске и в памяти и экономия времени процессора
257
06 января 2007 года
kosfiz
1.6K / / 18.09.2005
[quote=ahilles]разумеется короткий и сложный[/quote]
а какой код лучше использовать для объяснения? тоже компактный, но сложный для понимания???
[quote=ahilles]экономия места на диске и в памяти и экономия времени процессора[/quote]
а что при нынешних объемах жестких дисков у кого-то проблемы с тем, чтобы разместить несколько лишних Кб? сейчас машины почти у всех очень мощные и экономия памяти и времени процессора нужна только в продуктах, в которых промедление - смерти подобно. может еще предложишь всем на ассемблер перейти?:)
13
06 января 2007 года
RussianSpy
3.0K / / 04.07.2006
Цитата: kosfiz
может еще предложишь всем на ассемблер перейти?:)


Интересно как будет выглядеть двигло сайта написанное на асме... :confused:

257
06 января 2007 года
kosfiz
1.6K / / 18.09.2005
2ahilles
да кстати там весь спор начался из за следующих кусков кодов(немного изменены но смысл остался тот же):
№1
 
Код:
for i:=2 to num div 2 do
 if num mod i = 0 then break;

и №2
 
Код:
i:=2;
while i<=num div 2 do
 begin
  if num mod i = 0 then break;
  inc(i);
 end;

второй вариант вроде как длиннее не правда ли? а теперь дизассемблеруй и попробуй найти разницу.
[quote=RussianSpy]Интересно как будет выглядеть двигло сайта написанное на асме... [/quote]
я бы тоже взглянул. просто из доводов приведенных ahilles'ом получается что так и должно быть.
337
06 января 2007 года
shine
719 / / 09.06.2006
Цитата в тему:
Цитата:
I have made this [letter] longer, because I have not had time to make it shorter.

Blaise Pascal

263
06 января 2007 года
koltaviy
816 / / 16.12.2004
Цитата действительно хорошая.. )
И все же куда приятнее читать 'красивый' код..
Там где можно написать понятно и коротко, там и надо писать 'понятно и коротко', а не расписывать на 5 строчек, то что можно 'изложить' в одной-двух..
257
06 января 2007 года
kosfiz
1.6K / / 18.09.2005
[quote=koltaviy]Там где можно написать понятно и коротко, там и надо писать 'понятно и коротко'[/quote]
вообще-то автора темы интересует что лучше: компактынй и вместе с тем сложный код или длинный и простой. другие варианты типа компактный и простой здесь не фигурируют - оно и так ясно что компактный и простой - это лучше всего.
[quote=koltaviy]И все же куда приятнее читать 'красивый' код..
...
а не расписывать на 5 строчек, то что можно 'изложить' в одной-двух..[/quote]
код который расписан на 5 строк что не может быть таким же красивым как на две?
16K
06 января 2007 года
WandM
46 / / 13.11.2006
Цитата: Cutty Sark
Всегда пишу программы так, чтобы их мог прочитать другой человек. Поэтому на длине кода не экономлю. Куча комментариев, максимально ясная структура и т.п.


Вот, примерно об этом я и говорил.
Как писать код, чтобы его мог потом понять "коллега среднего уровня"?
Ведь довольно часто приходится править чужой код, а там иногда бывает, как в том "примерчике" от OlgaKr.

337
06 января 2007 года
shine
719 / / 09.06.2006
Цитата: WandM
Как писать код, чтобы его мог потом понять "коллега среднего уровня"?



Отыщи код который ты сам писал когда был "коллегой среднего уровня". В таком стиле и пиши.

263
06 января 2007 года
koltaviy
816 / / 16.12.2004
Не знаю по-моему вещи довольно относительные..
А что если твой код захочет прочитать не коллега среднего уровня, а коллега 'низкого' уровня..
Дык он и элементарных и кажущихся тебе простых вещей может не разобрать..
Так что писать может и нужно понятно, только не переусердствуя..:cool:
Лично я пишу, так сказать для себя.. Чтобы сам потом мог разобрать, учитывая то, что у меня не извращена фантазия, и я не пишу выражения вроде:
 
Код:
x = ++x + ++x + ++x;

З.Ы.: Спасибо OlgaKr за примерчик:D
337
06 января 2007 года
shine
719 / / 09.06.2006
Цитата: koltaviy
А что если твой код захочет прочитать не коллега среднего уровня, а коллега 'низкого' уровня..



:) Аналогично. Пиши так, как писал когда сам был чайником.

355
06 января 2007 года
&lt;SCORP&gt;
786 / / 21.10.2006
<gram|work> про индийский код
<gram|work> Какой самый извращенный способ проверить в условии if () булевскую переменную ?
<gram|work> bool b;
<gram|work> b = false;
<gram|work> if (b == true){...}
<gram|work> Это децкий лепет
<gram|work> ИТАК, ПЕРВОЕ МЕСТО
<gram|work> Знакомый говорит что нашел только что в коде:
<gram|work> if (b.ToString().length < 5){...}

originaly taken from http://bash.org.ru

а вообще, для меня сишные выражения типа if (-1 != (pos = str.Find("smth"))) {...} это нечто вроде отдушины :) это то, что позволяет мне не напрягаться при написании кода. в конце концов это, за что я люблю С. а то, что это может не понять кто-то, кто не знает языка -- это я моя проблема, а его. комменты писать -- да. но не на каждую строчку. код -- вот лучшее описание того, что тут твориться. если какое-то место на самом деле сложное и непонятное или его наличие подобного кода здесь не совсем очевидно, то тогда пишу коммент. коммент прежде всего для себя, чтобы не думать потом, "а зачем здесь это"
10
07 января 2007 года
Freeman
3.2K / / 06.03.2004
Цитата: shine
Пиши так, как писал когда сам был чайником.


Если это не шутка, то так недолго на всю жизнь чайником остаться. Язык определяет мышление. (c) кажется, Дейкстра.

Если уж на начинающих коллег кивать, писать надо так, чтобы они учились, читая ваш код.

252
07 января 2007 года
koderAlex
1.4K / / 07.09.2005
Цитата: RussianSpy
Интересно как будет выглядеть двигло сайта написанное на асме... :confused:


так же как и другие проги на асме )))

337
07 января 2007 года
shine
719 / / 09.06.2006
Цитата: Freeman
Если уж на начинающих коллег кивать, писать надо так, чтобы они учились, читая ваш код.



Не всегда начинающие коллеги хотят учиться и не всегда на это обучение есть время. К сожалению. :(

263
07 января 2007 года
koltaviy
816 / / 16.12.2004
Цитата: shine
Не всегда начинающие коллеги хотят учиться и не всегда на это обучение есть время. К сожалению. :(


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

 
Код:
..
try {
  e = b\0;
}
catch(...)
{
  ...
}
..

Нужно учиться 'правильному' коду.. И в этом я полностью солидарен c Freeman..
Помогать в этом конечно нужно, но все-таки..
А вместе с этим прийдет и понимание 'непонятного' доселе кода..;)
Они же все-таки коллеги, а не начальники, чтоб им всё всю жизнь разжевывать..
16K
07 января 2007 года
WandM
46 / / 13.11.2006
[QUOTE=<SCORP>;164908]для меня сишные выражения типа if (-1 != (pos = str.Find("smth"))) {...} это нечто вроде отдушины :)[/QUOTE]
Ну, если честно, то лично я в данном случае подумал, что условие if будет выполнено всегда.
Мои аргументы:
pos = str.Find("smth"); // логический результат присваивания всегда true
для сравнения C неявно приведет true к 1, получается:
if(-1 != 1)...

Вот так. А, возможно, я просто давно не писал на С :(
337
07 января 2007 года
shine
719 / / 09.06.2006
Цитата: koltaviy
Нужно учиться 'правильному' коду.. И в этом я полностью солидарен c Freeman..
Помогать в этом конечно нужно, но все-таки..
А вместе с этим прийдет и понимание 'непонятного' доселе кода..;)
Они же все-таки коллеги, а не начальники, чтоб им всё всю жизнь разжевывать..



А разве я спорю с тобой и с Freeman? :) Я-то согласен. Остался пустяк - убедить в необходимости обучения всех начинающих програмеров. Возьмешся? ;)

242
07 января 2007 года
Оlga
2.2K / / 04.02.2006
Цитата: WandM
Ну, если честно, то лично я в данном случае подумал, что условие if будет выполнено всегда.
Мои аргументы:
pos = str.Find("smth"); // логический результат присваивания всегда true
для сравнения C неявно приведет true к 1, получается:
if(-1 != 1)...

Вот так. А, возможно, я просто давно не писал на С :(


судя по названию функции, речь идет не о присваивании, а поиске подстроки, если строка не найдена возвращается -1, иначе - индекс с которого она начинается.

16K
07 января 2007 года
WandM
46 / / 13.11.2006
Функция возвращает значение, которое потом просто подставляется, т.е. получаем выражение вида: pos = 5; // (к примеру) а это - присваивание.
Не поленился, открыл Visual C и написал:
Код:
#include "stdio.h"

int f() {
    return 5;
}

void main() {
    int i;
    if (-1 != (i = f())) {
        printf("Always done");                 
    } else {
        printf("Assertion failed");                
    }
}

Результат выполнения: "Always donePress any key to continue"
263
07 января 2007 года
koltaviy
816 / / 16.12.2004
Народ, чо за оффтоп пошел?
Создавайте новую тему, если решили обсуждать чо там 'получается' и 'возвращается'..
242
07 января 2007 года
Оlga
2.2K / / 04.02.2006
Цитата:
pos = str.Find("smth"); // логический результат присваивания всегда true


никакой он не логический, обыкновенная операция присваивания переменной пос, а потом сравниваем со значением -1. провер ять не буду, устала :).

10
07 января 2007 года
Freeman
3.2K / / 06.03.2004
Цитата: shine
Остался пустяк - убедить в необходимости обучения всех начинающих програмеров. Возьмешся? ;)


А зачем? Это задача рынка и (опосредованно) начальников. Уволить к чёртовой матери дураков, что не хотят учиться - пусть в юзеры идут.

Другой вопрос, что в городе с небольшим рынком ИТ, каким может оказаться Днепропетровск (не знаю, не был), у начальников может просто не быть выбора. "Я его слепила из того, что было..." Но состояние рынка к качеству и уровню кода не имеет никакого отношения.

355
07 января 2007 года
&lt;SCORP&gt;
786 / / 21.10.2006
Цитата: WandM
Функция возвращает значение, которое потом просто подставляется, т.е. получаем выражение вида: pos = 5; // (к примеру) а это - присваивание.
Не поленился, открыл Visual C и написал:
Код:
#include "stdio.h"

int f() {
    return 5;
}

void main() {
    int i;
    if (-1 != (i = f())) {
        printf("Always done");                 
    } else {
        printf("Assertion failed");                
    }
}

Результат выполнения: "Always donePress any key to continue"



а на пиши

 
Код:
int f() {
    return -1;
}
16K
07 января 2007 года
WandM
46 / / 13.11.2006
Чего-то у меня совсем крыша едет. <SCORP> прав.
Надо отоспаться. А, вообще, что-то мы от темы отошли :).
3
08 января 2007 года
Green
4.8K / / 20.01.2000
Цитата: WandM

Код:
#include "stdio.h"

int f() {
    return 5;
}

void main() {
    int i;
    if (-1 != (i = f())) {
        printf("Always done");                 
    } else {
        printf("Assertion failed");                
    }
}


К вопросу о 'красоте кода':
1) почему бе не написать так:

 
Код:
void main() {
    int i = f();
    if (-1 != i) {
        printf("Always done");                 
    } else {
        printf("Assertion failed");                
    }
}

согласись, так значительно читабельнее.
И даже такое:
 
Код:
if (-1 != (i = f()) || -1 != (j = f2()))

я бы советовал разносить:
 
Код:
i = f();
if (-1 != i) {
  j = f();
  if (-1 != j) {
  }
}

Потому, что так интуитивно понятнее, а значит, 'красивее'.
Это мы уже как-то обсуждали: http://forum.codenet.ru/showthread.php?p=139338#post139338

Цитата: shine
:) Аналогично. Пиши так, как писал когда сам был чайником.


Неправильный подход. Почему бы не писать тогда эти посты так, как писал сочинения в первом классе?

Цитата: koltaviy

А что если твой код захочет прочитать не коллега среднего уровня, а коллега 'низкого' уровня..


Пусть тогда дорастет до надлежащего уровня.
Если кто-то не понимает творчество Лема или Стругацких, это же не повод писать им книги для дошкольного возраста.

241
08 января 2007 года
Sanila_san
1.6K / / 07.06.2005
Цитата: RussianSpy
JavaScript, ActionScript - чем код меньше тем лучше (экономия трафика все таки)...


JavaScript - согласен. ActionScript компилируется в байт-код, ему длина кода в известной степени пофигу.

337
08 января 2007 года
shine
719 / / 09.06.2006
Цитата: Green
Пусть тогда дорастет до надлежащего уровня.
Если кто-то не понимает творчество Лема или Стругацких, это же не повод писать им книги для дошкольного возраста.



Представь ситуацию. С одной стороны, Аркадий сможет понять Бориса только если он будет писать предельно просто. С другой стороны, Борис не может отказаться от Аркадия как от коллеги из-за того, что он выполняет много простой работы на которую у Бориса нет времени. Аркадий предпочитает пить пиво вместо того, чтобы учиться вникать в сложные тексты Бориса.

Как Борис сможет обеспечить высокую производительность команды иначе чем если будет продолжать писать просто?

3
08 января 2007 года
Green
4.8K / / 20.01.2000
Цитата: shine
Представь ситуацию. С одной стороны, Аркадий сможет понять Бориса только если он будет писать предельно просто. С другой стороны, Борис не может отказаться от Аркадия как от коллеги из-за того, что он выполняет много простой работы на которую у Бориса нет времени. Аркадий предпочитает пить пиво вместо того, чтобы учиться вникать в сложные тексты Бориса.

Как Борис сможет обеспечить высокую производительность команды иначе чем если будет продолжать писать просто?



Сама по себе ситуация расписана некорректно. Что значит "предельно просто"?
Допустим Аркадий не имеет представления о шаблонах, частной и частичной специализации и пр. возможностей языка С++. Допустим, что для Аркадия пустой звук слова "паттерн", "юниттест" и пр.

Тогда есть несколько вариантов решения:
1. Аркадий начинает реже пить пиво, а больше учиться.
2. Сложные места, в которые Аркадий не въезжает, он начинает изучать при помощи юнит-тестов и консультации Бориса.
3. Стык программного кода Бориса и Аркадия они пишут вместе (парное программирование), т.о. Аркадий помимо выполнения задачи ещё и перенимает опыт Бориса.
4. Если вышеперечисленное не осуществляется или не приносит результатов, увольняем Аркадия или перемещаем на другую работу, например, на кухню, мыть посуду. А на его место Борис наберет другого сотрудника и таким образом обеспечит высокую производительность команды.

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

263
08 января 2007 года
koltaviy
816 / / 16.12.2004
Цитата: shine
Представь ситуацию. С одной стороны, Аркадий сможет понять Бориса только если он будет писать предельно просто. С другой стороны, Борис не может отказаться от Аркадия как от коллеги из-за того, что он выполняет много простой работы на которую у Бориса нет времени. Аркадий предпочитает пить пиво вместо того, чтобы учиться вникать в сложные тексты Бориса.

Как Борис сможет обеспечить высокую производительность команды иначе чем если будет продолжать писать просто?


Чо за глупые ситуации?.. Если 'Аркадий':D любит пить пиво - пусть и пьет пиво, а не работает в комманде.. Я понимаю, если бы 'Борис' забивал на 'Аркадия' и позволял себе пить пиво.. Вот это было бы не совсем верно со стороны лучшего специалиста в комманде..
О чем опять же говорил Freeman:)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог