Императивный против декларативного в python [дубликат]

Это помогло мне понять всю проблему:

  1. https://stackoverflow.com/a/20074634/1066234
  2. https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

И в следующем примере проблемного запроса.

Проблемный:

SELECT COUNT(*) as attempts, SUM(elapsed) as elapsedtotal, userid, timestamp, questionid, answerid, SUM(correct) as correct, elapsed, ipaddress FROM `gameplay`
                        WHERE timestamp >= DATE_SUB(NOW(), INTERVAL 1 DAY)
                        AND cookieid = #

Решено путем добавления этого в конец:

  GROUP BY timestamp, userid, cookieid, questionid, answerid, elapsed, ipaddress

Примечание: см. сообщение об ошибке в PHP , он сообщает вам, где проблема.

Пример:

Ошибка запроса MySQL 1140: в агрегированном запросе без GROUP BY выражение # 4 списка SELECT содержит неагрегированный столбец ' db.gameplay.timestamp '; это несовместимо с sql_mode = only_full_group_by - Query: SELECT COUNT (*) в качестве попыток, SUM (истек) как elapsedtotal, userid, timestamp, questionid, answerid, SUM (правильный) как правильный, истекший, ipaddress FROM gameplay WHERE timestamp> = DATE_SUB (NOW (), INTERVAL 1 DAY) И userid = 1

В этом случае выражение # 4 отсутствовало в GROUP BY.

409
задан rae1 15 January 2013 в 21:10
поделиться

16 ответов

Отличным примером C # для декларативного и императивного программирования является LINQ.

С обязательным программированием вы сообщаете компилятору, что вы хотите, шаг за шагом.

Например , давайте начнем с этой коллекции и выберем нечетные числа:

List<int> collection = new List<int> { 1, 2, 3, 4, 5 };

С императивным программированием мы пройдем через это и решим, чего хотим:

List<int> results = new List<int>();
foreach(var num in collection)
{
    if (num % 2 != 0)
          results.Add(num);
}

Здесь мы говорим:

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

С декларативным программированием, с другой стороны, вы пишете код, который описывает то, что вы хотите, но не обязательно, как его получить (объявите желаемые результаты, но не шаг за шагом):

var results = collection.Where( num => num % 2 != 0);

Здесь мы говорим «Дайте нам все, где это странно», а не «Пройдите через коллекцию». Проверьте этот элемент, если он нечетный, добавьте его в сбор результатов. "

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

619
ответ дан Reed Copsey 25 August 2018 в 13:48
поделиться
2
ответ дан 4KCheshireCat 25 August 2018 в 13:48
поделиться
82
ответ дан AliKarimi 25 August 2018 в 13:48
поделиться
7
ответ дан Chris Eaves-Kohlbrenner 25 August 2018 в 13:48
поделиться
30
ответ дан engineforce 25 August 2018 в 13:48
поделиться

Я добавлю еще один пример, который редко появляется в декларативном / обязательном программировании: Пользовательский интерфейс!

В C # вы можете создавать пользовательский интерфейс с использованием различных технологий.

В крайнем случае вы можете использовать DirectX или OpenGL, чтобы очень настоятельно нарисовать свои кнопки, флажки и т. Д. ... по очереди (или действительно, треугольник по треугольнику). Вы должны сказать, как рисовать пользовательский интерфейс.

В декларативном конце у вас есть WPF. Вы в основном пишете XML (да, да, «XAML» технически), и структура работает для вас. Вы говорите, как выглядит пользовательский интерфейс. Это зависит от системы, чтобы понять, как это сделать.

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

Кроме того, одним из преимуществ декларативного программирования является то, что цель обычно легче понять из чтения кода, тогда как

Суть всего этого:

Декларативный -> what вы хотите сделать

Imperative -> how вы хотите это сделать

40
ответ дан Erich Mirabal 25 August 2018 в 13:48
поделиться

Императивное программирование требует от разработчиков определять шаг за шагом, как должен выполняться код. Чтобы дать указания в императивной манере, вы говорите: «Идите на 1-ю улицу, поверните налево на главный, пройдите два блока, поверните направо на Клен и остановитесь в третьем доме слева». В декларативной версии может звучать что-то вроде этого : «Поезжайте в дом Сью». Говорят, как что-то делать; другой говорит, что нужно сделать.

Декларативный стиль имеет два преимущества по отношению к императивному стилю:

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

Calvert, C Kulkarni, D (2009). Основной LINQ. Эддисон Уэсли. 48.

22
ответ дан GorkemHalulu 25 August 2018 в 13:48
поделиться
1
ответ дан kdopen 25 August 2018 в 13:48
поделиться
8
ответ дан kervin 25 August 2018 в 13:48
поделиться
10
ответ дан Lucent Fox 25 August 2018 в 13:48
поделиться
112
ответ дан Mark Rushakoff 25 August 2018 в 13:48
поделиться
8
ответ дан McKay 25 August 2018 в 13:48
поделиться
2
ответ дан Premraj 25 August 2018 в 13:48
поделиться
2
ответ дан Puneet Sharma 25 August 2018 в 13:48
поделиться
17
ответ дан ROMANIA_engineer 25 August 2018 в 13:48
поделиться
2
ответ дан Siavash Mortazavi 25 August 2018 в 13:48
поделиться
Другие вопросы по тегам:

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