ls -a
(Rozważam-a
opcję)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:
- flagi wydają się być boolami. na przykład,
setenforce 0
- opcje pomagają określić, jak polecenie powinno się zachowywać. Niektóre mogą być opcjonalne.
- 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.
ls -a
przykładzie. (Dla mnie flaga to zmienna boolowska).tar c abc.txt > x.tar
, tamc
jest funkcja . Próbujesz nazwać tę opcję i jest to całkowicie nieodpowiednie.Odpowiedzi:
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
argc
iargv
).argparse
Biblioteki 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ąć.
getopt
Biblioteka C jest użycie tego terminu. Istnieje jednak precedens dla „opcji”, które w rzeczywistości nie są opcjonalne: na przykładargparse
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ładtar
,ps
idd
). Opcja może sama wziąć argument (np.-w80
I--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.
źródło
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).źródło
git pull git://bla/bla
,pull
jest argumentgit
.pull
to polecenie. Polecenia można traktować jako rozszerzenia nazwy aplikacji: git pull <...> jest równoważny aplikacji o nazwiegit-pull
. Gdy aplikacja ma polecenia, każde polecenie powoduje, że aplikacja robi coś zupełnie innego.tar
Używaniec
do 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