Jaka jest różnica między flagą, opcją i argumentem? [Zamknięte]


14
  • ls -a(Rozważam -aopcję)

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

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

Nie mogę wymyślić przykładu, który mógłby powiedzieć „to jest flaga”, chyba że patrząc na listę reż.

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

Ma ustawioną „flagę odczytu” dla właściciela, ale to wszystko. Co powstrzymuje mnie przed nazwaniem tego „opcją odczytu”?

Piszę i edytuję dokumentację techniczną, głównie w DocBook XML, i szukam wyjaśnienia różnicy, które jest spójne i dokładne, jak to możliwe. Jednak już widzę wzór, który tworzy:

  1. flagi wydają się być boolami. na przykład,setenforce 0
  2. opcje pomagają określić, jak polecenie powinno się zachowywać. Niektóre mogą być opcjonalne.
  3. argumenty mówią komendom, na jakim obiekcie mają działać.

Widziałem siebie łączącego flagi i opcje (niektóre opcje mogą mieć tuzin możliwych wartości, ale booleany mają tylko dwie). Argumenty wydają się wystarczająco różne, aby je utrzymać jako takie.


2
„Co powstrzymuje mnie przed dzwonieniem…”? Oo Nic. Tak jak nic nie powstrzymuje mnie przed nazwaniem pika drzewem.
muru

@muru - chociaż słownik języka angielskiego nie zgadza się z twoim twierdzeniem.
DarkHeart

3
Aby wszystko było bardziej mylące, nazwałbym również opcję, która nie przyjmuje parametru / argumentu flagi, jak w twoim ls -aprzykładzie. (Dla mnie flaga to zmienna boolowska).
Ulrich Schwarz

3
To budy dla psów ; wszystkie trzydzieści. :-) ⁠
Scott

Wzór, który widzisz, istnieje tylko dlatego, że zawężasz rzeczy, które chcesz zobaczyć. Jednym ze sposobów, aby utworzyć plik TAR (które Używam od ponad 30 lat), a nie na przykład wyodrębnić to jest: tar c abc.txt > x.tar, tam cjest funkcja . Próbujesz nazwać tę opcję i jest to całkowicie nieodpowiednie.
Anthon

Odpowiedzi:


17

Nie ma spójnych definicji terminów „opcja”, „argument” i „flaga”, aw świecie twórców oprogramowania nie ma centralnego organu, który mógłby wymusić ich użycie. Dzieje się tak z dużą terminologią: po ponad 30 latach używania słowa „katalog” muszę teraz radzić sobie z osobami używającymi słowa „folder”, które zostały zdezorientowane przez new-speak Microsoft.

Istnieją różne sposoby, w jakie definicje konsensusu dla terminów mogą powstać w programowaniu. W przypadku opcji „argument” / „opcja” / „flaga” podręczniki kanoniczne i samouczki dotyczące języków programowania pomogły wymusić użycie, podobnie jak terminy używane we wspólnych bibliotekach.

Na przykład rzeczy, które umieszczasz w wierszu poleceń po poleceniu, są często nazywane „argumentami” polecenia, analogicznie do argumentów wywołania funkcji , i to prawdopodobnie częściowo dlatego, że są one nazywane „argumentami” w podręczniku C ( stąd argci argv). argparseBiblioteki Python pomaga również egzekwować termin „argument”. Widziałem jednak, że są one nazywane „parametrami”.

Termin „opcja” pochodzi od „opcjonalnego”, co oznacza, że ​​można je pominąć. getoptBiblioteka C jest użycie tego terminu. Istnieje jednak precedens dla „opcji”, które w rzeczywistości nie są opcjonalne: na przykład argparse instrukcja mówi, że można stworzyć „wymaganą opcję” (chociaż mówi również, że jest to „ogólnie uważana za zła forma”). Opcje są często poprzedzone pojedynczy ( -) lub podwójny ( --długo-opcja) myślnik, ale są dobrze znane polecenia, które nie wymagają użycia lub egzekwowania kreska dla opcji (na przykład tar, psi dd). Opcja może sama wziąć argument (np. -w80I --color=always) lub czasami wiele argumentów.

„Flagi” są, moim zdaniem, takie same jak opcje, ale zwykle nie biorą samych argumentów i zasadniczo reprezentują boolowskie przełączniki on-off.

Mówiąc szerzej, ponieważ każdy programista ma możliwość wypróbowania standardowego sposobu robienia rzeczy i nazywania rzeczy, ale może także wymyślić koło bez dodatkowych kosztów, nazewnictwo nigdy nie będzie spójne. A kiedy już udokumentujesz swój kod i stanie się jasne, jakie nowe znaczenie nadałeś tym słowom, podając przykłady, te imiona i znaczenia mogą po prostu pozostać, jeśli jest wystarczająca liczba osób, które wybierają je z twojego kodu.


7

Flaga jest rodzajem opcji, opcją typu logicznego i zawsze jest domyślnie fałszywa (np. --Verbose, --quiet, --all, --long itp.).

Opcja mówi funkcji, jak ma działać (np. -A, -l, --verbose, --output, -name, -c itp.), A argumenty informują funkcję, co ma działać na / z (np. *Plik1, nazwa hosta, baza danych).


Zatem w twojej definicji argumentem, który mówi, nad czym pracować git pull git://bla/bla, pulljest argument git.
Anthon

1
@Anthon nie, istnieją operatory (przełączniki / flagi / parametry), argumenty i polecenia . pullto polecenie. Polecenia można traktować jako rozszerzenia nazwy aplikacji: git pull <...> jest równoważny aplikacji o nazwie git-pull. Gdy aplikacja ma polecenia, każde polecenie powoduje, że aplikacja robi coś zupełnie innego.
Ziggy Crueltyfree Zeitgeister

Ludzie gitów mogą nazywać to komendą, ale nie zawsze tak się nazywa, np. tarUżywanie cdo tworzenia nazywa się funkcją . I to jest właśnie problem: nie ma standaryzacji terminów, nawet jeśli wygląda na to, że sądzisz na podstawie twojej odpowiedzi
Anthon

flaga domyślnie nie musi być fałszywa. udostępnienie flagi w wierszu poleceń po prostu odwraca jej domyślny stan (on -> off lub off -> on). niektórzy nazywają to przełącznikiem, aby odróżnić go od flagi. inni uważają, że rozróżnienie nie jest ważne.
cas
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.