Я думаю, что это в основном вопрос семантики, поэтому могут быть некоторые различия в понимании этих понятий. Тем не менее, this Wikipedia article содержит некоторые рекомендации, которые соответствуют моей интуиции на эту тему.
Заявление является единицей императивной программы. В частности, это единица, которая заканчивается терминатором оператора. В C это точка с запятой. Или, в Паскале и его потомках, это единица, разделенная разделителем операторов. Я думаю, что в большинстве вкусов Паскаля это также полуколона.
Команда - это действие, такое как вызов функции или ключевое слово, выполняющее действие. Статья в Википедии сравнивает их с глаголами, и я думаю, что это хорошее описание.
Таким образом, объявление переменной является инструкцией, но, вероятно, не является командой. И назначение переменной с помощью оператора присваивания может считаться командой некоторыми, а не другими. Иногда он слышит его как команду назначения, но не часто. Если он выглядит как вызов функции, как в TCL, тогда он более «командный», так как существует явный глагол set
.
Кроме того, утверждения могут состоять из нескольких команд. Например, подумайте о нескольких вызовах функций в C, связанных с запятыми. Я бы подумал, что один оператор, поскольку он имеет одну точку с запятой и возвращает одно значение. Однако каждый отдельный вызов можно считать командой.
Другая вещь, которую следует учитывать при рассмотрении терминологии statement/command, заключается в том, что утверждения обычно относятся к императивным программам, тогда как команды обычно относятся к оболочкам и скриптам. Таким образом, при использовании командной оболочки, такой как bash, один говорит о командах. Если я пишу сценарий bash, то он обычно воспринимается как скрипт команд, а не программа заявлений, хотя разница в основном академическая.
TCL, как один из ранних языков сценариев, вероятно, хотел провести различие между собой как интерпретируемый язык сценариев, работающий в оболочке (желании), по сравнению с скомпилированными языками, такими как C и Pascal. Например, Perl, получив популярность несколько позже, обычно не сталкивается с различием.
Однако вы все еще часто слышите, как люди ссылаются на скрипты Perl, а не на программы Perl, а также на TCL.
Я боюсь, что мой ответ, возможно, ничего не сделал, чтобы прояснить различие, но я надеюсь, что это поможет.
Спасибо всем. PS ... только что получил мою копию Ousterhout (и Jones) «Tcl и Tk Toolkit» 2-е издание –
Вы нашли ответ, который искали в ответах? – RHSeeger