Позиційні аргументи проти параметрів в інтерфейсі командного рядка

Розгляньте наступну програму командного рядка manage-id . Це робить такі речі:

manage-id list                       (list all usernames and user-ids)
manage-id show             (shows username's id)
manage-id clear            (erases username's id) 
manage-id set     (sets usernames id)
manage-id find               (list usernames whose id contains )

Вищезгаданий спосіб є одним із способів розробки інтерфейсу користувача. Ось ще:

manage-id --action list
manage-id --action show  --username 
manage-id --action clear --username 
manage-id --action set   --username  --id 
manage-id --action find  --search 

По-перше, це "дизайн позиційних аргументів", а другий - "варіант командного рядка".

Я вважаю за краще "розробити параметри командного рядка" з кількох причин:

  • аргументи можуть бути представлені в будь-якому порядку
  • імена параметрів самостійно документуються
  • видаляє неоднозначність щодо ролі аргументу (наприклад, у двох командах manage-id show johndoe і manage-id find john , другий аргумент відтворює різні ролі).

З іншого боку, "варіант командного рядка" використовує "опції", які не є обов'язковими.

Моє питання полягає в наступному: чи існує рекомендований (і широко застосовуваний) вибір стилю, який віддає перевагу одному з цих двох стилів над іншими для програм командного рядка Linux?

4
Настійно рекомендую використовувати команду параметр для додаткових параметрів.
додано Автор David Arno, джерело

5 Відповіді

Ваше питання - фальшива дихотомія.

Більшість місць, які я бачив, використовують обидва. Позиції на основі параметрів для необхідних параметрів і параметрів на основі параметрів для додаткових параметрів. Кінд має сенс, так?

14
додано

Стиль в кінцевому підсумку диктується складністю необхідного контролю. Якщо у вас є лише один варіант, можна використовувати позиційне. Якщо у вас є два, він починає обговорювати, який саме зручний спосіб піти. А для кого? Для вас, програміста? Або для користувача?

Існує ще один рівень: команди підпункту. Подивіться, наприклад, посилання на командний рядок Git .

Якщо ви робите багато утиліт командного рядка, ви будете розробляти якийсь парсер аргументів, що полегшує подачу складних аргументів у вашій програмі і легко доступ до них з коду. І тоді ви будете підтримувати стиль розбору аргументів, який є універсальним по всьому набору інструментів.

Зауважте, що ви можете мати значення за замовчуванням для іменних аргументів. Таким чином, вони можуть бути необов'язковими, що залежить від вас.

Обов'язково підтримуйте сторінку використання. Якщо ви введете недійсну команду, відкрийте сторінку, яка документує параметри.

2
додано

Моє питання полягає в наступному: чи існує рекомендований (і широко розповсюджений) вибір стилю, який віддає перевагу одному з цих двох стилів для інших програм командного рядка Linux?

Ви коли-небудь використовували командний рядок ?!

Я не знаю, чи є будь-який офіційний документ, що пропонує його, але в основному всі стандартні інструменти UNIX використовують позиційні аргументи для необов'язкових аргументів.

1
додано

"Дизайн позиційного аргументу" має одну (і основну) причину: простота парсера. Саме тому більшість команд MS-DOS використовують цей спосіб - це дешево! Як тільки ви входите в детальний потік параметрів, ви вийшли з цієї удачі. Таким чином, ви повинні використовувати підхід ключ/значення, який ви називаєте "варіант дизайну".

Так, "варіант дизайну" робить розбір командного рядка набагато складнішим. А це, в свою чергу, також дає вам більше свободи (це дуже корисно, коли ви генеруєте аргументи командного рядка по складній логіці і хотіли б уникнути конструктивного виконання).

У той самий час, як зазначив Павло, немає жодних обмежень для використання обох підходів в одній і тій же конструкції (тому основна частина - позиційна, а хвоста - опціональна).

1
додано
Ви не відповіли на запитання.
додано Автор whatsisname, джерело
Команди MS DOS, як і команди Unix, послідовно використовують суміш позиційних і необов'язкових аргументів. Існує рекомендований вибір стилів: виконайте те, що роблять більшість команд, і змішайте два стилі.
додано Автор David Arno, джерело
Відповідь: такого рекомендованого вибору стилю немає. Просто врахуйте свої цілі відповідно до описаних вище випадків.
додано Автор william zheng, джерело

Я не знаю, чи є цей відповідь SO лінгвістично авторитетним, але він чітко відрізняє:

arguments -- any part of a command
options -- information that modifies the behavior of the command
and
parameters -- extra information (not sure how this differs from an option)

0
додано