Qual è la differenza tra una bandiera, un'opzione e un argomento? [chiuso]


14
  • ls -a(Considero -aun'opzione)

  • sudo -u username( -u= opzione, username= arg)

  • chmod 664 my-dir( 664= opzione, my-dir= arg)

Non riesco a pensare a un esempio che potrebbe dire "questa è una bandiera" tranne forse quando guardo l'elenco di dir:

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

Questo ha il "flag di lettura" impostato per il proprietario, ma questo è tutto. Cosa mi impedisce di chiamarla "opzione di lettura"?

Scrivo e modifico documentazione tecnica, principalmente in DocBook XML, e cerco una spiegazione della differenza, che sia coerente e accurata possibile. Tuttavia, sto già vedendo un modello formarsi:

  1. le bandiere tendono ad essere booleane. per esempio,setenforce 0
  2. le opzioni aiutano a definire come dovrebbe comportarsi un comando. Alcuni potrebbero essere opzionali.
  3. gli argomenti dicono ai comandi su quale oggetto operare.

Potevo vedermi combinare bandiere e opzioni (alcune opzioni possono avere una dozzina di possibili valori, ma i booleani ne hanno solo due). Gli argomenti sembrano sufficientemente diversi per mantenerli come tali.


2
"Che cosa mi impedisce di chiamare ..."? Oo Niente. Proprio come nulla mi impedisce di chiamare una vanga un albero.
muru,

@muru - sebbene un dizionario inglese non sia d'accordo con la tua affermazione.
DarkHeart,

3
Per rendere le cose più confuse, chiamerei anche un'opzione che non prende un parametro / argomento un flag, come nel tuo ls -aesempio. (Per me, una bandiera è una variabile booleana.)
Ulrich Schwarz,

3
Sono canili ; tutti e trenta. :-) ⁠
Scott,

Lo schema che vedi è lì solo perché restringi le cose che vuoi vedere. Un modo per creare un file TAR (che utilizzo da più di 30 anni) e non per esempio estrarlo è: tar c abc.txt > x.tarin c'è cuna funzione . Stai provando a chiamarla un'opzione che è del tutto inappropriata.
Anthon,

Risposte:


17

Non esistono definizioni coerenti dei termini "opzione", "argomento" e "bandiera" e non esiste un'autorità centrale nel mondo dello sviluppo del software che possa imporre il loro utilizzo. Questo accade con molta terminologia: dopo oltre 30 anni di utilizzo della parola "directory", ora ho a che fare con persone che usano la parola "cartella" che sono state confuse dal new-speak di Microsoft.

Esistono diversi modi in cui le definizioni di consenso per i termini possono derivare dalla programmazione. Nel caso di "argomento" / "opzione" / "bandiera", manuali canonici ed esercitazioni per i linguaggi di programmazione hanno contribuito a rafforzare l'utilizzo, così come i termini utilizzati nelle librerie comuni.

Ad esempio, le cose che inserisci nella riga di comando dopo un comando vengono spesso chiamate "argomenti" al comando, per analogia con gli argomenti di una chiamata di funzione , e questo probabilmente è parzialmente dovuto al fatto che sono chiamati "argomenti" nel manuale C ( quindi argce argv). La argparselibreria Python aiuta anche a imporre il termine "argomento". Tuttavia, li ho visti anche chiamati "parametri".

Il termine "opzione" deriva da "opzionale", il che implica che possono essere esclusi. La getoptlibreria C è un uso di questo termine. Ma esiste un precedente per "opzioni" che in realtà non sono opzionali: ad esempio, il argparse manuale afferma che si può creare una "opzione richiesta" (anche se dice anche che questa è "generalmente considerata come una cattiva forma"). Le opzioni sono spesso precedute da un singolo ( -) o doppia ( --a lunga opzionale) cruscotto, ma ci sono comandi ben noti che non richiedono o impongono l'uso cruscotto per le opzioni (ad esempio, tar, pse dd). Un'opzione può a sua volta accettare un argomento (ad esempio, -w80e --color=always) o occasionalmente più argomenti.

Le "bandiere" sono, nella mia esperienza, le stesse delle opzioni, ma di solito non accettano argomenti da soli e rappresentano essenzialmente interruttori on-off booleani.

Su una nota più ampia, poiché ogni programmatore ha la possibilità di provare a cercare un modo standard di fare le cose e nominare le cose, ma può anche reinventare la ruota senza molti costi aggiuntivi, la denominazione non sarà mai coerente. E una volta che hai documentato il tuo codice, ed è chiaro quale nuovo significato hai dato a queste parole dando esempi, quei nomi e significati potrebbero semplicemente rimanere se ci sono abbastanza persone che li raccolgono dal tuo codice.


7

Un flag è un tipo di opzione, un'opzione di tipo booleano ed è sempre falso per impostazione predefinita (ad es. --Verbose, --quiet, --all, --long, ecc.).

Un'opzione indica alla funzione come agire (ad es. -A, -l, --verbose, --output, -name, -c, ecc.), Mentre un argomento indica alla funzione su cosa agire (ad esempio *, file1, nome host, database).


Quindi nella tua definizione, in git pull git://bla/bla, pullc'è un argomento che dice su gitcosa lavorare.
Anthon,

1
@Anthon no, ci sono operatori (switch / flag / parametri), argomenti e comandi . pullè un comando. Si può pensare ai comandi come estensioni del nome dell'applicazione: git pull <...> equivale a un'applicazione chiamata git-pull. Quando l'applicazione ha dei comandi, ogni comando rende l'applicazione completamente diversa.
Ziggy Crueltyfree Zeitgeister,

Le persone git potrebbero chiamarlo un comando, ma non è sempre quello per cui viene chiamato ad esempio tar, usare cper creare si chiama funzione . E questo è esattamente il problema: non esiste una standardizzazione dei termini, anche se sembra che tu pensi che ci sia dalla tua risposta
Anthon,

una bandiera non deve essere falsa per impostazione predefinita. fornendo il flag sulla riga di comando inverte semplicemente il suo stato predefinito (on -> off, o off -> on). alcune persone lo chiamano un interruttore per distinguerlo da una bandiera. altri pensano che la distinzione non sia importante.
Cas
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.