web-dev-qa-db-ja.com

フラグ、オプション、引数の違いは何ですか?

  • ls -a (私が検討します -a オプション)

  • Sudo -u username-u =オプション、username = arg)

  • chmod 664 my-dir664 =オプション、my-dir = arg)

Dirリストを見ているときを除いて、「これはフラグです」という例は考えられません。

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

これには、所有者に「読み取りフラグ」が設定されていますが、それだけです。これを「読み取りオプション」と呼ばないようにするにはどうすればよいですか?

私は主にDocBook XMLで技術文書を作成および編集しており、その違いの説明を探しています。これは可能な限り一貫して正確です。しかし、私はすでにパターンが形成されているのを見ています:

  1. フラグはブール値である傾向があります。例:setenforce 0
  2. オプションは、コマンドの動作を定義するのに役立ちます。一部はオプションの場合があります。
  3. 引数は、操作するオブジェクトをコマンドに指示します。

フラグとオプションを組み合わせる自分を見ることができました(一部のオプションには10の可能な値がある場合がありますが、ブール値には2つしかありません)。引数は、そのように維持するのに十分異なるように見えます。

14
user172130

「オプション」、「引数」、および「フラグ」という用語の一貫した定義はなく、ソフトウェア開発の世界でそれらの使用を強制できる中央の権限はありません。これは多くの用語で発生します。Wordの「ディレクトリ」を30年以上使用した後、Microsoftの新しい発言に混乱したWordの「フォルダ」を使用している人に対処する必要があります。

プログラミングでは、用語のコンセンサス定義が生じるさまざまな方法があります。 「引数」/「オプション」/「フラグ」の場合、一般的なライブラリで使用されている用語と同様に、プログラミング言語の正規のマニュアルとチュートリアルが使用を強制するのに役立ちました。

たとえば、コマンドの後にコマンドラインに入力したものは、関数呼び出しの引数との類似性から、コマンドの「引数」と呼ばれることがよくあります 、そしてこれはおそらく、Cマニュアルでは「引数」と呼ばれているためです(したがって、argcおよびargv)。 argparse Pythonライブラリは、「引数」という用語を強制するのにも役立ちますが、「パラメータ」と呼ばれることもあります。

「オプション」という用語は「省略可能」に由来し、省略できることを意味します。 getopt Cライブラリは、この用語の1つの使用法です。しかし、実際にはオプションではない「オプション」の前例があります。たとえば、argparse手動で「必須オプション」を作成できると述べています (これは「一般的に悪い形と見なされます」)。多くの場合、オプションの前には単一の(-)またはdouble(--、長いオプション)ダッシュですが、オプションのダッシュの使用を必要としない、または強制しないよく知られたコマンドがあります(例:tarps、およびdd )。オプションはitself引数を取ることができます(例:-w80および--color=always)、または時々複数の引数。

「フラグ」は、私の経験ではオプションと同じですが、通常は引数をとらず、本質的にブール型のオン/オフスイッチを表します。

より広い意味では、すべてのプログラマーは、標準の方法で名前を付けたり名前を付けたりするだけでなく、余分なコストをかけずにホイールを再発明することができるため、名前の一貫性を保つことはできません。そして、コードを文書化し、例を挙げてこれらの単語にどのような新しい意味を与えたのかが明らかである場合、コードから拾い上げる十分な人がいる場合、それらの名前と意味はそのまま残るかもしれません。

17
Anthon

フラグはオプションのタイプであり、ブール型のオプションであり、デフォルトでは常にfalseです(例:--verbose、-quiet、-all、-longなど)。

オプションは、関数にhowを実行するよう指示します(例:-a、-l、-verbose、-output、-name、-cなど)。引数が関数に指示するwhatに作用する/から作用する(例*、file1、ホスト名、データベース)。