Was ist der Unterschied zwischen einem Flag, einer Option und einem Argument? [geschlossen]

14
  • ls -a(Ich halte -aeine Option)

  • sudo -u username( -u= Option, username= Argument)

  • chmod 664 my-dir( 664= Option, my-dir= Argument)

Ich kann mir kein Beispiel vorstellen, das "Dies ist eine Flagge" sagen könnte, außer vielleicht, wenn ich Dir-Auflistung betrachte:

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

Hier ist das "Leseflag" für den Eigentümer gesetzt, aber das ist alles. Was hindert mich daran, das eine "Leseoption" zu nennen?

Ich schreibe und bearbeite technische Dokumentation, hauptsächlich in DocBook XML, und suche nach einer Erklärung für den Unterschied, die so konsistent und genau wie möglich ist. Es bildet sich jedoch bereits ein Muster:

  1. Flags sind in der Regel Booleaner. z.B,setenforce 0
  2. Mit den Optionen können Sie festlegen, wie sich ein Befehl verhalten soll. Einige können optional sein.
  3. Argumente teilen Befehlen mit, mit welchem ​​Objekt gearbeitet werden soll.

Ich könnte mir vorstellen, Flags und Optionen zu kombinieren (einige Optionen haben möglicherweise ein Dutzend mögliche Werte, aber Booleaner haben nur zwei). Argumente scheinen ausreichend verschieden zu sein, um sie als solche beizubehalten.

JohnDoea
quelle
2
"Was soll mich davon abhalten anzurufen ..."? Oo nichts. So wie mich nichts davon abhält, einen Spaten einen Baum zu nennen.
muru
@muru - obwohl ein englisches Wörterbuch Ihrer Behauptung nicht zustimmt.
DarkHeart
3
Um die Sache noch verwirrender zu machen, würde ich auch eine Option nennen, die keinen Parameter / kein Argument als Flag akzeptiert, wie in Ihrem ls -aBeispiel. (Für mich ist ein Flag eine boolesche Variable.)
Ulrich Schwarz
3
Sie sind Hundezwinger ; alle dreißig von ihnen. :-) ⁠
Scott
Das Muster, das Sie sehen, gibt es nur, weil Sie die Dinge einschränken, die Sie sehen möchten. Eine Möglichkeit, eine TAR-Datei zu erstellen (die ich seit mehr als 30 Jahren verwende) und nicht zB zu extrahieren, ist:, tar c abc.txt > x.tarin der es ceine Funktion gibt . Sie versuchen, dies als Option zu bezeichnen, und das ist völlig unangemessen.
Anthon

Antworten:

17

Es gibt keine einheitlichen Definitionen der Begriffe "Option", "Argument" und "Flag", und es gibt keine zentrale Autorität in der Welt der Softwareentwicklung, die ihre Verwendung erzwingen könnte. Dies geschieht mit viel Terminologie: Nachdem ich über 30 Jahre lang das Wort "Verzeichnis" verwendet habe, muss ich mich jetzt mit Leuten befassen, die das Wort "Ordner" verwenden und die durch das New-Speak von Microsoft verwirrt wurden.

Es gibt verschiedene Möglichkeiten, wie Konsensdefinitionen für Begriffe in der Programmierung zustande kommen können. Im Fall von "argument" / "option" / "flag" haben kanonische Handbücher und Lernprogramme für Programmiersprachen dazu beigetragen, die Verwendung zu erzwingen, ebenso wie die in allgemeinen Bibliotheken verwendeten Begriffe.

Zum Beispiel werden die Dinge, die Sie in der Befehlszeile nach einem Befehl einfügen, oft als "Argumente" für den Befehl bezeichnet, analog zu den Argumenten für einen Funktionsaufruf. Dies liegt wahrscheinlich auch daran, dass sie im C-Handbuch als "Argumente" bezeichnet werden ( daher argcund argv). Die argparsePython-Bibliothek hilft auch dabei, den Begriff "Argument" durchzusetzen. Ich habe jedoch auch gesehen, dass sie "Parameter" genannt werden.

Der Begriff "Option" leitet sich von "optional" ab, was bedeutet, dass sie weggelassen werden können. Die getoptC-Bibliothek ist eine Verwendung dieses Begriffs. Es gibt jedoch Präzedenzfälle für "Optionen", die eigentlich nicht optional sind: Im argparse Handbuch wird beispielsweise angegeben, dass eine "erforderliche Option" erstellt werden kann (obwohl auch angegeben wird, dass dies "allgemein als schlechte Form" gilt). Die Optionen sind oft von einem einzigen voran ( -) oder doppelten ( --Lang Option) Strich, aber es gibt bekannte Befehle, die keine Bindestrich - Nutzung für Optionen (zB erfordern oder durchzusetzen tar, psund dd). Eine Option kann selbst ein Argument (z. B. -w80und --color=always) oder gelegentlich mehrere Argumente annehmen .

"Flags" sind nach meiner Erfahrung die gleichen wie Optionen, verwenden jedoch normalerweise keine Argumente selbst und stellen im Wesentlichen boolesche Ein-Aus-Schalter dar.

Allgemein gesagt, da jeder Programmierer die Möglichkeit hat, nach einer Standardmethode für das Ausführen und Benennen von Dingen zu suchen, aber auch das Rad ohne großen Mehraufwand neu erfinden kann, wird die Benennung niemals konsistent sein. Und wenn Sie Ihren Code erst einmal dokumentiert haben und klar ist, welche neue Bedeutung Sie diesen Wörtern durch die Angabe von Beispielen gegeben haben, bleiben diese Namen und Bedeutungen möglicherweise erhalten, wenn genügend Personen vorhanden sind, die sie aus Ihrem Code entnehmen.

Anthon
quelle
7

Ein Flag ist ein Optionstyp, ein Boolescher Typ und standardmäßig immer falsch (z. B. --verbose, --quiet, --all, --long usw.).

Eine Option teilt der Funktion mit, wie sie zu handeln hat (z. B. -a, -l, --verbose, --output, -name, -c usw.), während ein Argument der Funktion mitteilt, was zu *tun ist (z. B. file1, Hostname, Datenbank).

Ziggy Crueltyfree Zeitgeister
quelle
In Ihrer Definition ist git pull git://bla/bladas pullalso ein Argument, das angibt, gitworan gearbeitet werden soll.
Anthon
1
@Anthon nein, es gibt Operatoren (Schalter / Flags / Parameter), Argumente und Befehle . pullist ein Befehl. Man kann sich Befehle als Erweiterungen des Anwendungsnamens vorstellen: git pull <...> entspricht einer aufgerufenen Anwendung git-pull. Wenn die Anwendung Befehle hat, bewirkt jeder Befehl, dass die Anwendung etwas völlig anderes ausführt.
Ziggy Crueltyfree Zeitgeister
Die Git-Leute nennen es vielleicht einen Befehl, aber das ist nicht immer das, wofür es aufgerufen wird, z. B. tarwird die Verwendung czum Erstellen eine Funktion genannt . Und genau das ist das Problem: Es gibt keine Standardisierung von Begriffen, auch wenn es so aussieht, als gäbe es aus Ihrer Antwort
Anthon,
Ein Flag muss nicht standardmäßig falsch sein. Wenn Sie das Flag in der Befehlszeile bereitstellen, wird lediglich der Standardstatus umgekehrt (Ein -> Aus oder Aus -> Ein). Manche Leute nennen das ein Umschalten, um es von einer Flagge zu unterscheiden. andere halten die Unterscheidung für unwichtig.
cas