2014 dxdy logo

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

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




На страницу Пред.  1, 2, 3, 4, 5, 6  След.
 
 Re: Как правильно писать программы?
Сообщение14.07.2010, 08:39 
Cave в сообщении #339078 писал(а):
В условии цикла понятно, что за j, а в теле? А если вы захотите потом с j какие-нибудь операции произвести? Что такое j == k или k = j? А что такое iFoundEdge = iEdge всем сразу понятно.

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

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

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

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

 
 
 
 Re: Как правильно писать программы?
Сообщение14.07.2010, 12:55 
Аватара пользователя
ewert в сообщении #339110 писал(а):
Если же цикл ещё длиннее -- то его фтопку; чересчур длинные циклы означают, что программа неправильно структурирована.


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

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

 
 
 
 Re: Как правильно писать программы?
Сообщение14.07.2010, 18:22 
Не могу себе представить человека, которому лицезрение буквосочетания типа
Код:
for indexofcols=1 to  numofcols do
    for indexofrows=1 to  numofrows do 
        thiswunderfullmatrix[indexofrows,indexofcols]:=...

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

 
 
 
 Re: Как правильно писать программы?
Сообщение15.07.2010, 11:16 
Потому что любую идею можно довести до абсурда.
Но по мне код
Код:
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 
creative в сообщении #339154 писал(а):
Это как сказать, например, веб-сервер это один большой цикл: прослушивание сокета, чтения с него данных, обработки ..., отправки данных.
Веб-сервер — это скорее конечный автомат. А то, что один переход сделан циклом, кстати, бесконечным, без всяких переменных-счётчиков — это детали реализации конечного автомата.

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

 
 
 
 Re: Как правильно писать программы?
Сообщение25.07.2010, 20:55 
Аватара пользователя
sergey83 в сообщении #340857 писал(а):
Вопрос такой, а существует ли хоть один инструмент, который бы позволял выкидывать из проекта функциональность?


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

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

Компилятор?

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

 
 
 
 Re: Как правильно писать программы?
Сообщение26.07.2010, 13:06 
Аватара пользователя
sergey83 в сообщении #340934 писал(а):
Как было бы хорошо, если бы функционал можно было удалить/отключить, сделав изменения в одном месте программы! Однако неприятность состоит в том, что функционал обычно размазан по тексту программы.


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

 
 
 
 Re: Как правильно писать программы?
Сообщение26.07.2010, 17:12 
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 
Аватара пользователя
Yuri Gendelman в сообщении #340985 писал(а):
'matrixOfDates' можно заменить на 'chisloSvidanij'


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

 
 
 
 Re: Как правильно писать программы?
Сообщение26.07.2010, 20:01 
creative в сообщении #340989 писал(а):
Проще давать им англоязычные имена.

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

 
 
 
 Re: Как правильно писать программы?
Сообщение26.07.2010, 20:14 
Аватара пользователя
ewert в сообщении #341025 писал(а):
creative в сообщении #340989 писал(а):
Проще давать им англоязычные имена.

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


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

 
 
 
 Re: Как правильно писать программы?
Сообщение26.07.2010, 20:53 
creative в сообщении #341029 писал(а):
Думаю не только я транслит не переношу.
Безусловно +1!

 
 
 [ Сообщений: 84 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group