ls -a
(Saya mempertimbangkan-a
opsi)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:
- bendera cenderung menjadi Boolean. misalnya,
setenforce 0
- opsi membantu menentukan bagaimana suatu perintah seharusnya berperilaku. Beberapa mungkin opsional.
- 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.
ls -a
contoh Anda . (Bagi saya, bendera adalah variabel boolean.)tar c abc.txt > x.tar
, di dalam sanac
adalah fungsi . Anda mencoba memanggil opsi itu dan itu sepenuhnya tidak pantas.Jawaban:
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
argc
danargv
). Theargparse
library 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
getopt
C 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
, dandd
). Opsi itu sendiri dapat mengambil argumen (misalnya,-w80
dan--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.
sumber
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).sumber
git pull git://bla/bla
,pull
adalah argumen yang memberi tahugit
apa yang harus dikerjakan.pull
adalah sebuah perintah. Orang dapat menganggap perintah sebagai ekstensi dari nama aplikasi: git pull <...> setara dengan aplikasi yang disebutgit-pull
. Ketika aplikasi memiliki perintah, setiap perintah membuat aplikasi melakukan sesuatu yang sama sekali berbeda.tar
, menggunakanc
untuk membuat disebut fungsi . Dan itulah masalahnya: tidak ada standardisasi istilah, bahkan jika sepertinya Anda pikir ada dari jawaban Anda