2010-08-30 4 views
44

Я хотел бы знать основные принципы и этикет написания хорошо структурированного кода.Хорошая практика написания кода MATLAB?

+12

Важно то, что вы разлагаете свою проблему на простые, управляемые части и что эти части имеют как можно меньше междоменной дистанции. Объектно-ориентированное программирование может помочь в этом, как и другие методы. Я также рекомендую прочитать Code Complete, предполагая, что вы продолжите разработку более крупных проектов. –

+2

@Seamus: Функциональное программирование было бы лучшим примером. Он принимает разложение до своего логического завершения. –

+0

@Harpreet: Конечно. Представьте, что вы разделили свою проблему на более мелкие части и начали кодирование. Вы достигаете точки, когда вам нужна функция, которую вы уже написали в одной из других «частей», поэтому вы просто вызываете функцию из нового кода. Вы создали межотдачу, сделав это, потому что, когда вы возвращаетесь и меняете первую «часть», чтобы исправить ошибку или добавить функцию, теперь вам нужно знать, что от нее зависит другой код в произвольном месте, и ваши изменения возможность создать новую ошибку в произвольном месте в вашем коде. –

ответ

21

Это самые важные две вещи, которые нужно иметь в виду, когда вы пишете код:

  1. Не писать код, который вы уже написали.
  2. Не пишите код, который вам не нужно писать.
34

Прочитано Code Complete, он будет творить чудеса для всего. Он покажет вам, где, как и когда имеет значение. Это в значительной степени Библия разработки программного обеспечения (ИМХО.)

+2

Моя копия кода Complete пропала! Все потеряно! –

+2

У меня моя копия кода завершена. Какая трагедия потерять твою! D: –

+2

Ahh - Стив Макконнелл. Эта книга - старая школа, но все же так актуальна! Еще одна хорошая книга его - «Быстрое развитие» –

2

Python Style Guide всегда является хорошей отправной точкой!

+1

Руководство по стилю Python больше для форматирования кода, а не структуры и т. Д. PEP-20 может быть более актуальным, так как 'import это 'http://www.python.org/dev/peps/pep-0020/, но не совсем понятно. –

+2

Структура - как вы упорядочиваете код в больших масштабах, другими словами, какие функции/объекты/логику размещаются там. Форматирование - это обычно используется для описания деталей кодирования, которые не обязательно влияют на его интерпретацию компилятором - где разместить новую строку, где размещать комментарии, как использовать вкладки + новые строки для четкого представления заявления. –

7

Этот список может продолжаться в течение длительного времени, но некоторые основные вещи:

  • отступа.
  • Названия описательных переменных.
  • Описательные имена классов/функций.
  • Не дублируйте код. Если ему нужно дублирование, вставьте класс/функцию.
  • Использование гетров/застройщиков.
  • Только выставляйте то, что необходимо в ваших объектах.
  • Принцип одиночной зависимости.
  • Узнайте, как писать хорошие комментарии, а не много комментариев.
  • Возьмите гордость за свой код!

Два хороших места для начала:

Clean-Code Handbook

Code-Complete

+0

Не используйте их - в подавляющем большинстве случаев они довольно избыточны. – Puppy

+0

@DeadMG: Я надеюсь, что вы имеете в виду, что нужно внедрять классы, чтобы геттеры и сеттеры не нужны, а не должны выставлять членов данных в код клиента. –

+0

согласны с тем, что многие люди делают вещи лишними, делая вещи, как частный список, а затем набирают/устанавливают на нем. есть искусство создавать действительно хорошие gettors/settors. –

1

Лучший совет, который я получил, когда я задал этот вопрос следующим образом:

Never code while drunk. 
+0

не может сказать, что Я пробовал этот>> –

+0

Как ни странно, немного алкоголя может сделать меня намного более эффективным кодером, но я бы никогда не попытался сделать какую-либо значительную работу над дизайном в этом состоянии. – Omnifarious

+0

Кто-то будет связываться, может быть, : http://xkcd.com/323/ –

5

Если вы хотите что-то использовать как refe rence или ethiquette, я часто следую официальным соглашениям стиля Google для любого языка, на котором я работаю, например, для C++ или для Python.

The Practice of Programming от Роб Пайка и Брайана У. Кернигана также есть раздел о стиле, который я нашел полезным.

+0

Соглашения в стиле Google запрещают использование исключений в C++, а также предлагают некоторые несколько искаженные правила для передачи переменных в некоторых случаях я бы не рекомендовал их так высоко. – Omnifarious

+2

+1 для Kernighan и Pike! –

15

Ну, если вы хотите его с точки зрения непрофессионала:

Я рекомендую людям писать кратчайшее читаемый программу, которая работает .

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

+1

Отличный совет. Либо крайность (многословие или терпение) ma Код kes трудно читать. Программисты Java и Perl, похоже, отказываются это понимать. – dsimcha

+0

Мне нравится это предложение. Это очень хороший момент, однако его следует иметь в виду, чтобы придерживаться его при написании кода, потому что его легко слушали, а не следили. – Pupil

+0

Я бы изменил это на рабочую читаемую кратчайшую программу :) Работа важнее, чем читаемая, что более важно, чем коротко. +1 хотя. –

2

Лично я обнаружил, что я узнал больше о стиле программирования от работы через SICP, который является текстом MIT Intro to Comp SCI (я про четверть пути). Чем любая другая книга. При этом, если вы собираетесь работать на Python, руководство по стилю Google - отличное место для начала.

Я где-то читал, что большинство программ (скриптов в любом случае) никогда не должно быть больше нескольких строк. Все необходимые функции должны быть абстрагированы на функции или классы. Я склонен согласиться.

+1

http://mitpress.mit.edu/sicp/ –

5

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

-

Дать хороший исходный код:

  1. Комментарий кода.
  2. Используйте имена переменных длиной более нескольких букв. Между 5 и 20 - хорошее эмпирическое правило.
  3. Более короткие строки кода не лучше - используйте пробелы.
  4. Быть «умным» с вашим кодом - это хороший способ запутать себя или другого человека позже.
  5. Разложите проблему на свои компоненты и используйте иерархический дизайн для сборки решения.
  6. Помните, что вам нужно будет поменять вашу программу позже.
  7. Прокомментируйте свой код.

В компьютерном программировании много причуд. Их сторонники рассматривают тех, кто не следит за причудой, не просвещенной и не очень с ней. Нынешние основные причуды кажутся «Test Driven Development» и «Agile». Причудой в 1990-е годы было «объектно-ориентированное программирование». Изучите полезные основные части идей, которые появляются, но не будьте догматичны и помните, что лучшая программа - это та, которая выполняет работу, которую она должна выполнять.

очень тривиальный пример более конденсированные кода с верхней части моей головы

for(int i=0,j=i; i<10 && j!=100;i++){ 
    if i==j return i*j; 
    else j*=2; 
}} 

в то время как это более читаемым:

int j = 0; 
for(int i = 0; i < 10; i++) 
{ 
    if i == j 
    { 
     return i * j; 
    } 
    else 
    { 
    j *= 2; 
    if(j == 100) 
    { 
     break; 
    } 
    } 
} 

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

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

В этом суть того, что пытался передать другой плакат - не делайте программу дольше, чем нужно. Более длинный имеет два значения: больше строк кода (т. Е. Наложение фигурных скобок на их собственную линию) и более сложные. Сделать программу более сложной, чем нужно, не очень хорошо. Сделать его более читаемым хорошо.

+0

@Harpreet: некоторым людям нравится иметь очень сжатый код - наименьшее количество строк кода в файле, do больше с меньшим количеством кода. В конечном итоге это затрудняет чтение для тех, кто не знаком с языком программирования и программой. –

+1

@Harpreet: см. Править. –

+5

@Paul Nathan: Вы дважды перечислили «комментарий своего кода». Комментирование важно, но важно также не переусердствовать. Обычно не следует говорить «что» делает код, что должно быть очевидно из кода; если это не очевидно, это часто является признаком того, что код должен быть написан более четко. Комментарии должны быть сосредоточены на том, почему код «что-то делает» или какие предположения делает код. Комментарий, такой как «+ + 5;/* Добавить 4 в * /», не улучшает читаемость на одну йоту. – supercat

2

Многие хорошие моменты были сделаны выше. Я, безусловно, все это. Я также хотел бы добавить, что правописание и последовательность кодирования - это то, что вы практикуете (а также в реальной жизни).

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

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

2

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

http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html

переговоры как о ППК-20 и ППК-8, некоторые пасхальные яйца (весело материал) и т. д.

3

Посмотрите на 97 Things Every Programmer Should Know.
Это бесплатно и содержит много драгоценных камней, как это одна:

Существует одна цитата, я думаю, что это особенно хорошо для всех программных разработчиков знать и держать близко к их сердца:

Красота стиля, гармонии и изящества и хороший ритм зависит от простоты. - Платон

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

Есть ряд вещей, которые мы стремимся для в нашем коде:

  • читаемость
  • ремонтопригодность
  • Скорость развития
  • Неуловимый качество красоты

Платон говорит, что фактор для всех этих качеств ities простота.

+0

Но простота - это самый короткий код или самый длинный код без петель или функций? Являются ли шаблоны простым способом замены функций или сложным способом? –

2

Вы можете посмотреть онлайн-курс Стэнфорда: Programming Methodology CS106A. Инструктор дал несколько действительно хороших инструкций для написания исходного кода.

Некоторые из них являются следующие:

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

  2. Как сделать комментарии: положить в комментарии для разъяснения вещи в программе, которые не являются очевидными

  3. Как сделать разложение

    1. Один метод решает одну проблему
    2. Каждый метод имеет код приблизительный 1 ~ 15lines
    3. Дайте методы good names
    4. Написать комментарий для кода
+0

URL-адрес будет творить чудеса для ответа. –

1

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

2

Unit Tests
Python и MATLAB являются динамическими языками. По мере роста вашей базы кода вы будете вынуждены реорганизовать свой код. В отличие от статически типизированных языков, компилятор не будет обнаруживать «разбитые» части в вашем проекте. Использование модульных тестовых инфраструктур, таких как xUnit, не только компенсирует недостающие проверки компилятора, они позволяют рефакторинг с постоянной проверкой для всех частей вашего проекта.

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

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

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

Все Вышеупомянутое
Pure кодирования темы, связанные, например, с помощью руководства по стилю, а не дублировать код, ..., уже упоминалось.

+0

@Harpreet: Я бы хотел привести примеры кода, но это может выходить за рамки этой платформы. Вы найдете примеры кода для xUnit в загружаемом zip-файле в Matlab Central. Хороший, не бесплатный, ресурс для отслеживания ошибок - http://www.atlassian.com/software/jira/. – zellus

2

Небольшое дополнение к прекрасным ответам уже здесь относительно Matlab:

  • Избегайте длинные скрипты, вместо того, чтобы писать функции (суб подпрограммы) в отдельных файлах. Это сделает код более понятным и более простым в оптимизации.

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

  • Используйте code sectioning и любую другую структуру кода, предлагаемую в новейшей версии Matlab.

  • Learn how to benchmark Ваш код с использованием timeit и profile. Вы обнаружите, что иногда для циклов это лучшее решение.

Смежные вопросы