¿Cuál es la diferencia entre una bandera, una opción y un argumento? [cerrado]

14
  • ls -a(Considero -auna opción)

  • sudo -u username( -u= opción, username= arg)

  • chmod 664 my-dir( 664= opción, my-dir= arg)

No puedo pensar en un ejemplo que pueda decir "esto es una bandera", excepto quizás cuando se mira en la lista de directorios:

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

Esto tiene el "indicador de lectura" establecido para el propietario, pero eso es todo. ¿Qué me impide llamar a eso una "opción de lectura"?

Escribo y edito documentación técnica, principalmente en DocBook XML, y estoy buscando una explicación de la diferencia, que sea lo más consistente y precisa posible. Sin embargo, ya veo que se forma un patrón:

  1. Las banderas tienden a ser booleanas. p.ej,setenforce 0
  2. Las opciones ayudan a definir cómo debe comportarse un comando. Algunos pueden ser opcionales.
  3. Los argumentos le dicen a los comandos sobre qué objeto operar.

Pude verme combinando banderas y opciones (algunas opciones pueden tener una docena de valores posibles, pero los booleanos solo tienen dos). Los argumentos parecen suficientemente diferentes para mantenerlos como tales.

JohnDoea
fuente
2
"¿Qué me impide llamar ..."? Oo nada. Así como nada me impide llamar a una espada árbol.
muru
@muru, aunque un diccionario de inglés no estará de acuerdo con tu afirmación.
DarkHeart
3
Para hacer las cosas más confusas, también llamaría a una opción que no tome un parámetro / argumento como bandera, como en su ls -aejemplo. (Para mí, una bandera es una variable booleana.)
Ulrich Schwarz
3
Son perreras ; los treinta de ellos. :-) ⁠
Scott
El patrón que ves solo está ahí porque limitas las cosas que quieres ver. Una forma de crear un archivo TAR (que he estado usando durante más de 30 años) y no, por ejemplo, extraerlo es: tar c abc.txt > x.tarhay cuna función . Estás tratando de llamar a eso una opción y eso es completamente inapropiado.
Anthon

Respuestas:

17

No existen definiciones consistentes de los términos "opción", "argumento" e "indicador", y no existe una autoridad central dentro del mundo del desarrollo de software que pueda imponer su uso. Esto sucede con mucha terminología: después de más de 30 años de usar la palabra "directorio", ahora tengo que tratar con personas que usan la palabra "carpeta" que han sido confundidas por el nuevo discurso de Microsoft.

Hay diferentes formas en que las definiciones consensuadas de términos pueden surgir en la programación. En el caso de "argumento" / "opción" / "bandera", los manuales y tutoriales canónicos para lenguajes de programación han ayudado a imponer el uso, al igual que los términos utilizados en bibliotecas comunes.

Por ejemplo, las cosas que coloca en la línea de comando después de un comando a menudo se denominan "argumentos" al comando, por analogía con los argumentos de una llamada a función , y esto probablemente se deba en parte a que se llaman "argumentos" en el manual de C ( por lo tanto argcy argv). La argparsebiblioteca de Python también ayuda a aplicar el término "argumento". Sin embargo, también he visto que se llaman "parámetros".

El término "opción" se deriva de "opcional", lo que implica que pueden omitirse. La getoptbiblioteca C es un uso de este término. Pero existe un precedente para las "opciones" que en realidad no son opcionales: por ejemplo, el argparse manual establece que uno puede crear una "opción requerida" (aunque también dice que esto "generalmente se considera mala forma"). Las opciones suelen ir precedidas de un guión simple ( -) o doble ( --opción larga), pero hay comandos bien conocidos que no requieren ni imponen el uso del guión para las opciones (p. Ej tar. ps, Y dd). Una opción puede en sí tener un argumento (por ejemplo, -w80e --color=always), o en ocasiones múltiples argumentos.

Las "banderas" son, en mi experiencia, lo mismo que las opciones, pero generalmente no toman argumentos en sí mismos y esencialmente representan interruptores de encendido y apagado booleanos.

En una nota más amplia, dado que cada programador tiene la opción de intentar buscar alguna forma estándar de hacer cosas y nombrar cosas, pero también puede reinventar la rueda sin un costo adicional, nombrar nunca será coherente. Y una vez que haya documentado su código, y quede claro qué nuevo significado le ha dado a estas palabras al dar ejemplos, esos nombres y significados podrían quedarse si hay suficientes personas que los recogen de su código.

Anthon
fuente
7

Una bandera es un tipo de opción, una opción de tipo booleano, y siempre es falsa por defecto (por ejemplo, --verbose, --quiet, --all, --long, etc.).

Una opción le dice a la función cómo actuar (por ejemplo, -a, -l, --verbose, --output, -name, -c, etc.), mientras que un argumento le dice a la función sobre qué actuar / desde (por ejemplo *, file1, nombre de host, base de datos).

Ziggy Crueltyfree Zeitgeister
fuente
Entonces, en su definición, en git pull git://bla/bla, el pulles un argumento que dice en gitqué trabajar.
Anthon
1
@Anthon no, hay operadores (interruptores / banderas / parámetros), argumentos y comandos . pulles un comando Uno puede pensar en los comandos como extensiones del nombre de la aplicación: git pull <...> es equivalente a una aplicación llamada git-pull. Cuando la aplicación tiene comandos, cada comando hace que la aplicación haga algo completamente diferente.
Ziggy Crueltyfree Zeitgeister
La gente git podría llamarlo un comando, pero eso no siempre es lo que se llama tar, por ejemplo , usar cpara crear se llama función . Y ese es exactamente el problema: no hay una estandarización de los términos, incluso si parece que crees que hay una respuesta
Anthon
una bandera no tiene que ser falsa por defecto. proporcionar el indicador en la línea de comando simplemente invierte su estado predeterminado (activado -> desactivado, o desactivado -> activado). Algunas personas llaman a eso una palanca para distinguirlo de una bandera. otros piensan que la distinción no es importante.
cas