Насколько сложный код должен быть?

По умолчанию используется возврат неизмененного документа. Если вы хотите, чтобы новый, обновленный документ возвращался, вам нужно передать дополнительный аргумент: объект с свойством new, установленным на true.

http://mongoosejs.com /docs/api.html#model_Model.findOneAndUpdate

Запрос # findOneAndUpdate

function(error, doc) {
  // error: any errors that occurred
  // doc: the document before updates are applied if `new: false`, or after updates if `new = true`
}

Доступные опции

new: bool - если true, вернуть измененный документ, а не оригинал. defaults to false (изменено в 4.0)

Итак, если вы хотите обновленный результат в переменной doc:

Cat.findOneAndUpdate({age: 17}, {$set:{name:"Naomi"}}, {new: true}, function(err, doc){
    if(err){
        console.log("Something wrong when updating data!");
    }

    console.log(doc);
});

38
задан 2 revs, 2 users 100% 17 January 2009 в 11:30
поделиться

28 ответов

Поскольку Einstein сказал:

Делают все максимально простым, но не более простые.

Это применяется к коду, а также к физике.

Использование Ваше решение - станет легче поддержать? Часто путем сокращения большой, если/еще путаница во что-то меньшее Вы удаляете угловые случаи, которые не должны были быть там, предотвращая ошибки, которые, возможно, открылись в будущем. Конечно, путем сокращения ясного набора условий в неясное скручивание булевой логики, которая только, оказывается, работает, можно делать вещи намного более трудными поддержать, когда что-то изменяется.

РЕДАКТИРОВАНИЕ:
Со случаем Вы процитировали, если формула собирается работать, то это - вероятно, более оптимальный вариант - можно даже оставить комментарий, цитирующий источник. Это совершенно возможно, хотя, что формула была там прежде, но был отброшен, чтобы позволить конкретному случаю работаться вокруг. Это - вид вещи, с которой должны помочь комментарии в Вашем репозитории управления версиями.

Начиная ни с чьего отправленного ссылка все же, вот описание алгоритма PID , он обращается к.

54
ответ дан 4 revs 23 September 2019 в 18:35
поделиться

Комплекс не обязательно означает более или менее строки кода мне.

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

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

при создании его слишком простым (и на 50 - 70% больше кода) это может иметь проблемы производительности.

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

мне нравится решать сложные проблемы с простыми шагами. Где это не возможно, сложность увеличивается соответственно. Была точка в другом вопросе о знании когда его "достаточно хорошее". Иногда немного больше кода (5-20%) может значительно сместить сложность, которая может быть более дорогой, чтобы повторно учиться или понять кем-то.

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

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

0
ответ дан Jas Panesar 23 September 2019 в 18:35
поделиться

Сложные алгоритмы хороши, только если скорость или располагает повышение с интервалами, на самом деле необходимо. Не потрудитесь писать необычный факториальный алгоритм, который работает в O (1), потому что факториал приблизительно 25 в основном никогда не будут используемыми. Однако, если код находится в самом внутреннем цикле, и ускорение для 25% в этом коде улучшится, целое приложение на 20% тогда идут для него.

0
ответ дан theycallhimtom 23 September 2019 в 18:35
поделиться

Я признаюсь, что знал и любил математику и алгоритмы, но для меня с 150 строками, если/еще путаница является путем, более сложным и твердым поддержать, чем что-нибудь, что может быть выражено чисто в 20 строках. Зарегистрируйте код правильно и вставьте ссылки на бумаги, книги или Википедию.

0
ответ дан 23 September 2019 в 18:35
поделиться

Зависит. Я не хотел бы должным быть поддерживать 150 строк if-then-else операторов, составляющих функцию, особенно если дерево решений является плотным. 20 строк сложной математики могут или не могут быть лучше. Это может занять время для понимания, но более длительное решение могло бы взять еще дольше для проверки.

Идеально, Вы нашли бы способ сделать это в меньше, и более простые строки, но не все функции прокладывают себе путь.

при использовании этих 20 строк использование некоторые из этих 130 строк экономили на комментариях для объяснения, какой алгоритм Вы используете. Если Вы не можете объяснить его хорошо, пойдите с решением с 150 строками.

0
ответ дан David Thornley 23 September 2019 в 18:35
поделиться

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

0
ответ дан 2 revs 23 September 2019 в 18:35
поделиться

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

2
ответ дан Sam 23 September 2019 в 18:35
поделиться

Это должно быть столь же сложно по мере необходимости. То, чем это не может быть, сложно, большая разница.

0
ответ дан Otávio Décio 23 September 2019 в 18:35
поделиться

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

3
ответ дан Toon Krijthe 23 September 2019 в 18:35
поделиться

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

риск создания простой случается так, что кто-то не захочет понимать его, потому что это длинно.

1
ответ дан Joe Phillips 23 September 2019 в 18:35
поделиться

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

1
ответ дан texmex5 23 September 2019 в 18:35
поделиться

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

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

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

2
ответ дан user56057 23 September 2019 в 18:35
поделиться

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

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

, Но сохраняют те алгоритмы изолированными в их собственных функциях и не забывают объяснять входные и выходные переменные!

Обязательная кавычка:

сложность “Controlling является сущностью программирования. ” (Brian Kernigan)

1
ответ дан Daniel O 23 September 2019 в 18:35
поделиться

Я думаю, что важно разделить доменную сложность от базовой технической сложности.

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

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

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

Поэтому, если Ваши 150 строк того, если/еще материал "соответствует" пути проблема, выражается намного лучше, чем 20 умных строк, это - намного больше удобного в сопровождении и потребляемого бита кода. При взятии долгосрочной перспективы писание под управлением кода легко, это сохраняет это тем путем, который является реальной проблемой....

Paul.

1
ответ дан Paul W Homer 23 September 2019 в 18:35
поделиться

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

2
ответ дан Calyth 23 September 2019 в 18:35
поделиться

Старая добрая кавычка....

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

  • Martin Fowler
9
ответ дан Michael Kniskern 23 September 2019 в 18:35
поделиться

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

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

редактирование: Относительно примера PID: Мне очень трудно предположить, что функциональностью PID может нормально заменить набор если еще операторы. Если еще решение будет всегда работать хуже (менее плавные переходы), быть очень твердым поддержать, и очень трудно настроиться (настройка частей PID очень важна для получения желаемого поведения). Я хотел бы добавить, что понимание PID не слишком трудно, даже если Вы не знаете математику, которая может легко искаться.

5
ответ дан 2 revs 23 September 2019 в 18:35
поделиться

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

4
ответ дан Cheese Daneish 23 September 2019 в 18:35
поделиться

Столь сложный, как это должно быть и не больше.

6
ответ дан Cody Brocious 23 September 2019 в 18:35
поделиться

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

13
ответ дан 2 revs 23 September 2019 в 18:35
поделиться

Интересно достаточно одной из наиболее распространенных мер сложности кода является глубина вложения. Ваше решение "If-then-else" может быть классифицировано как [еще 110] комплекс автоматизированным анализатором кода, чем Ваш шаблонный.

Однако я видел достаточно "WTF?" кодирование этого, которое Вы описываете, что я обычно шел бы для подхода if-then-else. Но рассмотрите это; возможно использовать Ваш более сложный, шаблонный подход, но разделить особенно трудные компоненты на хорошо названные методы? Если можно сделать так (возможно даже осуществляющий рефакторинг для устранения дублирование), можно быть в состоянии избежать худших аспектов алгоритма при предотвращении многоуровневой if-then-else структуры также.

4
ответ дан Mark Brittingham 23 September 2019 в 18:35
поделиться

Дзэн Python делает довольно хорошее задание решения этой проблемы:

...

Простой лучше, чем комплекс.

Комплекс лучше, чем сложный.

...

, Если реализацию трудно объяснить, это - плохая идея

...

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

...

Особые случаи не являются достаточно особенными для нарушения правил.

, Хотя практичность бьет чистоту.

...

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

4
ответ дан 2 revs 23 September 2019 в 18:35
поделиться

Я не могу полагать, что кто-либо думает, что 150 строк чего-либо более просты, чем 20 строк чего-то.

Идут с этими 20 строками и защищают Ваших коллег следующим образом:

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

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

При понимании кода требует специальных экспертных знаний (понимание дифференциальных уравнений в частных производных, градуса в физике, теории Galois, Вы называете его), затем для защиты себя можно хотеть перейти к управлению и сказать, что "У меня есть эти специальные экспертные знания, которые позволяют мне записать код, который меньше (и поэтому быстрее, более надежен, и легче поддержать), но когда необходимо заменить меня, Вы оказываетесь перед необходимостью нанимать кого-то с подобными экспертными знаниями. Что Вы хотите, чтобы я сделал?" Будет полезно, если можно сказать управление, как легко такие экспертные знания могут быть получены. Например, много людей с дипломами инженера может изучить дифференциальные уравнения в частных производных, но теоретики Galois скорее редко встречаются.

P.S. Вот комментарий в качестве примера из проекта хобби, таким образом, я могу отладить свой собственный код позже:

/* 
 * Compute the position of a point partially along the geodesic from 
 * pt1.lat,pt1.lon to pt2.lat,pt2.lon
 * 
 * Ref: http://mathworld.wolfram.com/RotationFormula.html
 */
8
ответ дан Norman Ramsey 23 September 2019 в 18:35
поделиться

Код записан однажды, и читайте 10 раз. Таким образом, необходимо попытаться сделать максимально легким понять.

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

Просто попытка следовать Три Закона Разработки программного обеспечения :

  1. разработчик А должен записать код, который создает стоимость.
  2. разработчик А должен сделать их код легким поддержать, кроме того, где такие расходы будут конфликтовать с первым законом.
  3. разработчик А должен уменьшить их код до самого маленького возможного размера, поскольку долгое сокращение как таковое не конфликтует с первыми двумя законами.
28
ответ дан martinus 23 September 2019 в 18:35
поделиться

Robert C. Martin использует этого комика в качестве введения в его книгу Чистый Код :

The only valid measurement of code quality: WTFs/minute
(источник: osnews.com )

23
ответ дан 4 revs, 2 users 78% 23 September 2019 в 18:35
поделиться

Запишите код способом, который является самым легким поддержать и понять для среднего программиста, который работает над Вашим кодом.

4
ответ дан NotDan 23 September 2019 в 18:35
поделиться

Уровень "комплекса" может быть немного рискованным здесь, но, пока алгоритм не требует, чтобы доктор философии в математике решил,

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

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

11
ответ дан Dillie-O 23 September 2019 в 18:35
поделиться

Это действительно зависит от того, что означает комплекс. Если Ваш "простой" алгоритм будет 150 строками почти того же кода, мои глаза потускнеют, и я не буду в состоянии понять его. Если Вы поместите те условия в матрицу, или что-то и Ваш код - тогда цикл, чтобы считать матрицу и принять решения, я пойму его лучше даже при том, что цикл может быть менее "простым" тогда набор если/еще операторы.

, Если в основном Вы говорите о программе Perl, где Вы делаете все в одной строке, делающей огромное использование переменного $ по умолчанию _, я сказал бы палку с дольше большей подробной версией.

, Если существует принятая формула, чтобы сделать что-то тогда, что можно использовать принятую формулу. Если существует простая алгебраическая формула, которая проводит 3 или 4 строки и существует сложное дифференциальное уравнение, которое проводит одну строку, необходимо использовать простую алгебраическую формулу. В случае, упомянутом в комментариях, я думаю, что Алгоритм PID "более прост", чем 150 строк если/еще код. Я не думаю, что Вы используете алгоритм для затемнения чего-либо, а скорее Вы используете стандартные методы в домене проблемы. Просто удостоверьтесь, что прокомментировали его хорошо и возможно даже включали ссылку на веб-страницу, описывающую формулу.

6
ответ дан Cervo 23 September 2019 в 18:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: