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.