2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4, 5, 6  След.
 
 Re: Как правильно писать программы?
Сообщение14.07.2010, 08:39 
Заслуженный участник


11/05/08
32166
Cave в сообщении #339078 писал(а):
В условии цикла понятно, что за j, а в теле? А если вы захотите потом с j какие-нибудь операции произвести? Что такое j == k или k = j? А что такое iFoundEdge = iEdge всем сразу понятно.

По поводу экономии буковок - это вообще ужас, уж извините.

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

Если цикл коротенький, то для его переменной нужны безусловно однобуквенные идентификаторы. Если чуть подлиннее -- то длиннее; скажем, номер варианта и количество вариантов следует обозначать, конечно, как iv и nv (или даже nvar, но не ivar, и уж всяко не длиннее). Если же цикл ещё длиннее -- то его фтопку; чересчур длинные циклы означают, что программа неправильно структурирована.

А всю осмысленность следует загонять не в имена, а в комментарии. Которые писать, конечно, лень, но -- надо.

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение14.07.2010, 12:55 
Аватара пользователя


01/04/10
910
ewert в сообщении #339110 писал(а):
Если же цикл ещё длиннее -- то его фтопку; чересчур длинные циклы означают, что программа неправильно структурирована.


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

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение14.07.2010, 17:45 


02/07/08
322
Смысл самодокументированного кода именно в том, чтобы его можно было читать без комментариев. Что почти всегда нужно комментировать - это методы и функции: делать аннотацию к ней с описанием цели, подробно описать аргументы, возвращаемое значение, если есть, бросаемые исключения. Места же в коде нужно комментировать в довольно исключительных случаях, именно потому, что это является излишним - всё должно быть прозрачно и так.
Я не категорически против переменных i и j, я и сам их иногда использую. Но каждый подобный случай я разрешаю себе отдельно, объясняя его разумность в данной ситуации.
Если нужно перебрать элементы матрицы, то почти все называют индексы именно i, j. А ответить на вопрос, кто из них отвечает за строку, а кто - за столбец, с ходу могут не все. И это даже среди разработчиков, а тем, кто к этому не привык, но вынужден читать чужой код, и вовсе придётся отдельно с этим разбираться. Иное дело было бы при именовании column и row (или col, row - тут уже дело вкуса). И таких примеров множество.
Не нужно злоупотреблять длинными именами (что, кстати, на мой вкус, свойственно примерам из "Code complete"), никто за это не ратует. Но давать им ёмкие, понятные, осмысленные имена необходимо почти всегда.

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение14.07.2010, 18:22 
Заслуженный участник


11/05/08
32166
Не могу себе представить человека, которому лицезрение буквосочетания типа
Код:
for indexofcols=1 to  numofcols do
    for indexofrows=1 to  numofrows do 
        thiswunderfullmatrix[indexofrows,indexofcols]:=...

-- могло бы доставить удовольствие

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение15.07.2010, 11:16 


02/07/08
322
Потому что любую идею можно довести до абсурда.
Но по мне код
Код:
for col=1 to nCols do
    for row=1 to nRows do
        matrix[row, col]:=...

заметно выигрывает у
Код:
for j=1 to nj do
    for i=1 to ni do
        a[i, j]:=...

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение15.07.2010, 13:24 


04/06/10
117
creative в сообщении #339154 писал(а):
Это как сказать, например, веб-сервер это один большой цикл: прослушивание сокета, чтения с него данных, обработки ..., отправки данных.
Веб-сервер — это скорее конечный автомат. А то, что один переход сделан циклом, кстати, бесконечным, без всяких переменных-счётчиков — это детали реализации конечного автомата.

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение25.07.2010, 20:47 


03/06/10
152
Вы говорите, реализовывать функциональность по частям. Системы контроля версий позволяют откатится назад. Однако если было сначала реализовано A, потом B, потом C, то система контроля версий не поможет выкинуть B, оставив A и C.
Вопрос такой, а существует ли хоть один инструмент, который бы позволял выкидывать из проекта функциональность?
Меня однажды просили, выкини из программы всё лишнее, чтобы её текст умещался на экране. Я бы хотел иметь инструмент, который позволял бы выкидывать реализованную функциональность в произвольном порядке. Этот инструмент должен давать предупреждение: "Чувак, если выкинуть B, то придется выкинуть D и Е!"
Существует ли такой инструмент?

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение25.07.2010, 20:55 
Аватара пользователя


21/04/10
33
Москва
sergey83 в сообщении #340857 писал(а):
Вопрос такой, а существует ли хоть один инструмент, который бы позволял выкидывать из проекта функциональность?


Не знаю как обстоит дело в функциональных языках, но в ООП (C#, Java, VisualBasic и C++) есть такое понятие как классы, в которых собственно и аккумулируется "функционал". При модификации/удалении класса, соответственным образом происходят изменения и во всем проекте.

sergey83 в сообщении #340857 писал(а):
Этот инструмент должен давать предупреждение: "Чувак, если выкинуть B, то придется выкинуть D и Е!"

Компилятор?

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение26.07.2010, 11:39 


03/06/10
152
Как было бы хорошо, если бы функционал можно было удалить/отключить, сделав изменения в одном месте программы! Однако неприятность состоит в том, что функционал обычно размазан по тексту программы.
Пример. У Герберта Шилда есть программа синтаксического анализа арифметических выражений. Операции +,-,*,/,^ . Чтобы исключить операцию возведения в степень ^, нужно сделать изменения во многих местах программы.
Ещё что-то похожее описывал Горбунов-Посадов.

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение26.07.2010, 13:06 
Аватара пользователя


01/04/10
910
sergey83 в сообщении #340934 писал(а):
Как было бы хорошо, если бы функционал можно было удалить/отключить, сделав изменения в одном месте программы! Однако неприятность состоит в том, что функционал обычно размазан по тексту программы.


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

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение26.07.2010, 17:12 
Заслуженный участник


15/05/05
3445
USA
ewert в сообщении #339224 писал(а):
Не могу себе представить человека, которому лицезрение буквосочетания типа
Код:
for indexofcols=1 to  numofcols do
    for indexofrows=1 to  numofrows do 
        thiswunderfullmatrix[indexofrows,indexofcols]:=...
-- могло бы доставить удовольствие

Имена переменных должны быть не только достаточно длинными, но и содержательными. Например:
Код:
for ( indexOfBoy = 0; indexOfBoy < numOfBoys; indexOfBoy++ )
    for ( indexOfGirl = 0; indexOfGirl < numOfGirl; indexOfGirl++ )
        matrixOfDates[indexOfBoy,indexOfGirl] = ...
'matrixOfDates' можно заменить на 'chisloSvidanij'

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение26.07.2010, 17:22 
Аватара пользователя


01/04/10
910
Yuri Gendelman в сообщении #340985 писал(а):
'matrixOfDates' можно заменить на 'chisloSvidanij'


Мне кажется не стоит давать имена из русского языка данного транслитом. Проще давать им англоязычные имена.

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение26.07.2010, 20:01 
Заслуженный участник


11/05/08
32166
creative в сообщении #340989 писал(а):
Проще давать им англоязычные имена.

Не совсем. Есть пусть и небольшой, но риск нарваться на системное имя. Транслит же это практически исключает.

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение26.07.2010, 20:14 
Аватара пользователя


01/04/10
910
ewert в сообщении #341025 писал(а):
creative в сообщении #340989 писал(а):
Проще давать им англоязычные имена.

Не совсем. Есть пусть и небольшой, но риск нарваться на системное имя. Транслит же это практически исключает.


В *nix системах достаточно называть имена с большой буквы. Думаю не только я транслит не переношу.

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение26.07.2010, 20:53 
Заслуженный участник


27/04/09
28128
creative в сообщении #341029 писал(а):
Думаю не только я транслит не переношу.
Безусловно +1!

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 84 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group