В чем разница между флагом, опцией и аргументом? [закрыто]

14
  • ls -a(Я рассматриваю -aвариант)

  • sudo -u username( -u= опция, username= аргумент)

  • chmod 664 my-dir( 664= опция, my-dir= аргумент)

Я не могу вспомнить пример, который мог бы сказать «это флаг», разве что, если посмотреть на листинг каталога:

-r--------. 1 david david   3344 May 19 17:48 611056.pdf

Здесь установлен флаг чтения для владельца, но это все. Что мешает мне называть это «опцией чтения»?

Я пишу и редактирую техническую документацию, в основном на DocBook XML, и я ищу объяснения различий, которые являются последовательными и максимально точными. Тем не менее, я уже вижу формирование шаблона:

  1. флаги, как правило, булевы. например,setenforce 0
  2. Параметры помогают определить, как должна вести себя команда. Некоторые могут быть необязательными.
  3. Аргументы говорят командам, с каким объектом работать.

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

JohnDoea
источник
2
«Что мешает мне позвонить…»? Оо ничего. Как ничто не мешает мне называть вещи своими именами.
Муру
@muru - хотя английский словарь не согласится с вашим утверждением.
DarkHeart
3
Чтобы сделать вещи более запутанными, я бы также назвал параметр, который не принимает параметр / аргумент, как флаг, как в вашем ls -aпримере. (Для меня флаг - это логическая переменная.)
Ульрих Шварц
3
Это собачьи будки ; все тридцать из них. :-) ⁠
Скотт
Шаблон, который вы видите, существует только потому, что вы сужаете то, что хотите видеть. Один из способов создать файл TAR (который я использовал в течение более 30 лет) , а не , например , извлечь это: tar c abc.txt > x.tar, там cесть функция . Вы пытаетесь назвать это вариантом, и это совершенно неуместно.
Антон

Ответы:

17

Не существует согласованных определений терминов «опция», «аргумент» и «флаг», и в мире разработки программного обеспечения нет централизованного органа, который мог бы обеспечить их использование. Это происходит с большой терминологией: после 30 с лишним лет использования слова «каталог», мне теперь приходится иметь дело с людьми, использующими слово «папка», которые были сбиты с толку новичками Microsoft.

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

Например, вещи, которые вы помещаете в командную строку после команды, часто называют «аргументами» команды, по аналогии с аргументами вызова функции , и это, вероятно, частично потому, что они называются «аргументами» в руководстве по C ( отсюда argcи argv). Библиотека argparsePython также помогает применять термин «аргумент». Однако я также видел, что их называют «параметрами».

Термин «опция» происходит от «необязательного», что означает, что они могут быть опущены. Библиотека getoptC является одним из употреблений этого термина. Но есть прецедент для «опций», которые на самом деле не являются необязательными: например, в argparse руководстве говорится, что можно создать «обязательную опцию» (хотя в нем также говорится, что это «обычно считается плохой формой»). Варианты часто предшествуют один ( -) или двойной ( --с длинной опцией) тир, но есть хорошо известные команды , которые не требуют или обеспечить использование тира для опций (например, tar, ps, и dd). Опция сама может принимать аргумент (например, -w80и --color=always) или иногда несколько аргументов.

«Флаги», по моему опыту, такие же, как параметры, но обычно не принимают аргументы сами по себе и по сути представляют собой булевы переключатели.

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

Энтон
источник
7

Флаг - это тип параметра, параметр булева типа, и по умолчанию он всегда ложный (например, --verbose, --quiet, --all, --long и т. Д.).

Опция сообщает функции, как действовать (например, -a, -l, --verbose, --output, -name, -c и т. Д.), В то время как аргументы указывают функции, что делать с / с (например *, file1, имя хоста, база данных).

Ziggy Crueltyfree Zeitgeister
источник
Так что в вашем определении, в git pull git://bla/bla, то pullесть аргумент , который говорит , gitчто работать.
Антон
1
@ Нет, есть операторы (переключатели / флаги / параметры), аргументы и команды . pullэто команда. Команды можно рассматривать как расширение имени приложения: git pull <...> эквивалентно вызываемому приложению git-pull. Когда приложение имеет команды, каждая команда заставляет приложение делать что-то совершенно другое.
Ziggy Crueltyfree Zeitgeister
Git люди могут назвать это командой, но это не всегда то, что она называется, например tar, использование cдля создания называется функцией . И это именно проблема: нет стандартизации терминов, даже если кажется, что вы думаете, что есть из вашего ответа
Anthon
флаг не должен быть ложным по умолчанию. предоставление флага в командной строке просто меняет его состояние по умолчанию (вкл. -> выкл. или выкл. -> вкл.). некоторые люди называют это переключателем, чтобы отличить его от флага. другие считают, что различие неважно.
Cas