Apa perbedaan antara bendera, opsi, dan argumen? [Tutup]


14
  • ls -a(Saya mempertimbangkan -aopsi)

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

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

Saya tidak bisa memikirkan contoh yang mungkin mengatakan "ini adalah bendera" kecuali mungkin ketika melihat daftar dir:

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

Ini memiliki "tanda baca" yang ditetapkan untuk pemilik, tetapi hanya itu. Apa yang membuat saya berhenti menyebutnya "opsi baca"?

Saya menulis dan mengedit dokumentasi teknis, terutama dalam DocBook XML, dan saya mencari penjelasan tentang perbedaannya, yang konsisten dan seakurat mungkin. Namun, saya sudah melihat pola membentuk:

  1. bendera cenderung menjadi Boolean. misalnya,setenforce 0
  2. opsi membantu menentukan bagaimana suatu perintah seharusnya berperilaku. Beberapa mungkin opsional.
  3. argumen memberi tahu objek apa yang dioperasikan.

Saya dapat melihat diri saya menggabungkan flag dan opsi (beberapa opsi mungkin memiliki selusin nilai yang mungkin, tetapi Boolean hanya memiliki dua). Argumen muncul cukup berbeda untuk mempertahankannya seperti itu.


2
"Apa yang membuatku berhenti menelepon ..."? Tidak ada apa-apa. Sama seperti tidak ada yang menghentikan saya dari memanggil sekop pohon.
muru

@muru - meskipun kamus bahasa Inggris tidak akan setuju dengan pernyataan Anda.
DarkHeart

3
Untuk membuat hal-hal lebih membingungkan, saya juga akan memanggil opsi yang tidak mengambil parameter / argumen sebagai flag, seperti pada ls -acontoh Anda . (Bagi saya, bendera adalah variabel boolean.)
Ulrich Schwarz

3
Mereka adalah kandang anjing ; mereka bertiga. :-) ⁠
Scott

Pola yang Anda lihat hanya ada di sana karena Anda mempersempit hal-hal yang ingin Anda lihat. Salah satu cara untuk membuat file TAR (yang saya telah menggunakan selama lebih dari 30 tahun) dan tidak misalnya ekstrak adalah: tar c abc.txt > x.tar, di dalam sana cadalah fungsi . Anda mencoba memanggil opsi itu dan itu sepenuhnya tidak pantas.
Anthon

Jawaban:


17

Tidak ada definisi yang konsisten dari istilah "opsi", "argumen", dan "bendera", dan tidak ada otoritas pusat dalam dunia pengembangan perangkat lunak yang dapat menegakkan penggunaannya. Ini terjadi dengan banyak terminologi: setelah 30+ tahun menggunakan kata "direktori", saya sekarang harus berurusan dengan orang-orang yang menggunakan kata "folder" yang telah dikacaukan oleh Microsoft yang baru berbicara.

Ada berbagai cara definisi konsensus untuk istilah dapat muncul dalam pemrograman. Dalam kasus "argumen" / "opsi" / "bendera", manual kanonik dan tutorial untuk bahasa pemrograman telah membantu menegakkan penggunaan, seperti istilah yang digunakan di perpustakaan umum.

Misalnya, hal-hal yang Anda letakkan di baris perintah setelah perintah sering disebut "argumen" ke perintah, dengan analogi dengan argumen untuk panggilan fungsi , dan ini mungkin sebagian karena mereka disebut "argumen" dalam manual C ( karenanya argcdan argv). The argparselibrary Python juga membantu untuk menegakkan istilah "argumen". Namun, saya juga melihat mereka disebut "parameter".

Istilah "opsi" berasal dari "opsional", yang menyiratkan mereka dapat ditinggalkan. The getoptC library adalah salah satu penggunaan istilah ini. Tetapi ada preseden untuk "opsi" yang sebenarnya bukan opsional: misalnya, argparse manual menyatakan bahwa seseorang dapat membuat "opsi yang diperlukan" (meskipun ia juga mengatakan bahwa ini "umumnya dianggap bentuk buruk"). Pilihan sering didahului oleh satu ( -) atau ganda ( --, panjang-opsi) dash, tapi ada perintah terkenal yang tidak memerlukan atau menegakkan penggunaan dasbor untuk pilihan (misalnya, tar, ps, dan dd). Opsi itu sendiri dapat mengambil argumen (misalnya, -w80dan --color=always), atau kadang-kadang beberapa argumen.

"Bendera", dalam pengalaman saya, sama dengan opsi, tetapi biasanya tidak mengambil argumen sendiri dan pada dasarnya mewakili switch on-off boolean.

Pada catatan yang lebih luas, karena setiap programmer memiliki opsi untuk mencoba dan mencari beberapa cara standar dalam melakukan sesuatu dan menamai sesuatu, tetapi juga dapat menemukan kembali roda tanpa biaya tambahan, penamaan tidak akan pernah konsisten. Dan begitu Anda telah mendokumentasikan kode Anda, dan jelaslah arti baru apa yang Anda berikan pada kata-kata ini dengan memberikan contoh, nama-nama dan makna itu mungkin akan melekat jika ada cukup banyak orang yang mengambilnya dari kode Anda.


7

Bendera adalah jenis opsi, opsi jenis boolean, dan selalu salah secara default (misalnya --verbose, --quiet, --all, --long, dll).

Opsi memberi tahu fungsi cara bertindak (misalnya -a, -l, --verbose, --output, -name, -c, dll), di mana argumen memberi tahu fungsi apa yang harus bertindak pada / dari (misalnya *, file1, nama host, basis data).


Jadi dalam definisi Anda, dalam git pull git://bla/bla, pulladalah argumen yang memberi tahu gitapa yang harus dikerjakan.
Anthon

1
@Anthon tidak, ada operator (switch / flags / parameter), argumen, dan perintah . pulladalah sebuah perintah. Orang dapat menganggap perintah sebagai ekstensi dari nama aplikasi: git pull <...> setara dengan aplikasi yang disebut git-pull. Ketika aplikasi memiliki perintah, setiap perintah membuat aplikasi melakukan sesuatu yang sama sekali berbeda.
Ziggy Crueltyfree Zeitgeister

Orang-orang git mungkin menyebutnya perintah, tetapi itu tidak selalu seperti apa yang disebut misalnya untuk tar, menggunakan cuntuk membuat disebut fungsi . Dan itulah masalahnya: tidak ada standardisasi istilah, bahkan jika sepertinya Anda pikir ada dari jawaban Anda
Anthon

bendera tidak harus salah secara default. menyediakan bendera pada baris perintah hanya membalikkan status default-nya (on -> off, atau off -> on). beberapa orang menyebut itu toggle untuk membedakannya dari bendera. yang lain berpikir perbedaan itu tidak penting.
Kasus
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.