Я просматриваю вводную книгу по программированию, в которой приведен простой пример псевдокода:
Start
input myNumber
set myAnswer = myNumber * 2
output myAnswer
Stop
Почему мы не можем опустить создание другой переменной с именем myAnswer
и просто поместить операцию в выходную команду, например так:
Start
input myNumber
output myNumber * 2
Stop
Почему первое правильно, а второе нет?
pseudocode
structured-programming
user1475207
источник
источник
Ответы:
Вы можете, но с другой стороны, вы видите, что происходит, и вы можете использовать
myAnswer
позже в программе. Если вы используете свой второй, вы не можете использовать повторноmyAnswer
.Итак, позже в программе вы можете захотеть:
У вас могут быть разные операции, для которых вы хотите его использовать.
Рассмотрим обмен номерами:
Это было бы трудно без переменных. Компьютерные книги начинаются с базовых знаний, и большинство программ просты, пока вы не увидите сложность. В учебниках почти все тривиально, и только в сложности вы видите, где что-то происходит или нет.
источник
result
переменные даже для коротких функций, так что отладка с помощью добавленияprint(result)
действительно быстрая. Это скорее из-за удобства, чем из хорошей практики.Другая причина: присваивание
set myAnswer = myNumber * 2
дает полученному значению имя . Человек, читающий двухстрочную версию вашего кода, знает только, что он выводит значениеmyNumber * 2
. Человек читает версию три строки можно увидеть , чтоmyNumber * 2
это ответ .Это может показаться неважным в таком тривиальном примере, но иногда назначение значения результата переменной со значимым именем может значительно облегчить чтение и понимание вашего кода другими программистами.
источник
i
,result
или другого бессмысленного идентификатора ничего не делает для улучшения ясности, а только загромождает кодi
лучше быть индексом массива. Если естьresult
, функция должна заканчиватьсяreturn result
или моральный эквивалент. И так далее ...return result
, то вы можете просто встроить, чтобы вернуть то, что вы назначали на результат. Мы видим, что это результат. Вы возвращаете это, мы получаем это.Это псевдокод. Это не должен быть какой-то конкретный реализованный язык.
Некоторые языки программирования не поддерживают оценку выражения, а затем вывод результата в той же строке кода. Например, большинство ассемблеров не поддерживают это. Возможно, автор книги хотел показать вещи на низком уровне.
источник
Другие ответы касались конкретных деталей механики и примеров того, когда та или иная форма была бы лучше, но я хочу упомянуть немного о более глубоком, своего рода философском:
Вы изучаете язык.
Язык - это то, в чем идеи могут быть выражены и поняты (переданы). Язык компьютерного программирования имеет дополнительное свойство, заключающееся в том, что его можно механически анализировать с помощью машины, предназначенной для выполнения действий (выполнения) на основе идей (решений), которые заданы и используются в этом языке.
На ЛЮБОМ языке, который вообще полезен, есть более чем один способ выразить почти любую идею, выражаемую на этом языке.
Рассмотрим широкий спектр нюансов, доступных на английском языке. Даже простое предложение, такое как
может быть изменен, чтобы выразить немного разные идеи или сделать акцент на разных частях сцены , обращаясь к одному и тому же действию физической вселенной.
Во-первых, грамматические варианты:
Затем все шире и шире варианты, все еще относящиеся к тому же физическому действию:
Просто посмотрите на значение слова «рядом» в этом последнем предложении. Его включение несет в себе целый ряд новых концепций, которые иначе не присутствуют.
Существует всегда больше , чем один из способов сделать это, Python дзен наоборот.
Конечно, будет ОДИН способ, который прекрасно выражает ваше намерение и является наиболее подходящим, точно так же, как вы выбрали бы только ОДИН из предложенных выше предложений на английском языке, в зависимости от того, что именно вы хотели сообщить. Вот что такое Дзен Питона.
Но во вводном курсе по программированию или вводном курсе английского языка вы должны сначала изучить различные способы (формулировки, фрагменты кода), в которых вы можете сформулировать идею, прежде чем выработать решение о выборе наиболее подходящего варианта.
источник
__init__
и__new__
просто назвать несколько. Дело в том, что каждый из них подходит к слегка другой проблеме. Вы не выберете одно из этих английских предложений случайно и не выберете одну из этих возможностей языка Python случайно.Вы спрашиваете только о той
myAnswer
переменной, которая кажется избыточной. Другие ответы уже объясняют некоторые причины и причины, по которым было бы целесообразно их опускать или использовать, но вот еще один: как насчет этого?или даже это
На большинстве языков это все еще работает, но вы можете прочитать это? Это сложно, поэтому мы часто используем вспомогательные переменные, потому что компьютеры не единственные, кто читает код. Мы должны поддерживать его и понимать его в течение нескольких месяцев, и еще сложнее написать код, который вы все равно сможете понять позже, чем рабочий ... обычно через несколько дней вы не поймете, почему вы что-то сделали определенным образом ,
источник
(*2)
. Однако я бы возразил, что выполнение ввода не обязательно может быть выражено безопасно как простой доступ к переменной / выполнение арифметической операции: это может иметь наблюдаемые побочные эффекты.Вы можете сделать оба варианта (в этом простом случае), но первый вариант становится более читабельным и структурированным для более сложных случаев. Первый вариант показывает модель IPO с одной линией для каждого шага (две из них уже с правильным именем):
источник