Required arguments¶
Arguments are positional parameters.
By default:
- an attribute is mapped to an argument if it has no default value
 - and as it has no default value, it is required
 
We will see in the next page how to make an argument optional.
An implicit argument¶
Let's take back our initial application:
require "clip"
module Myapplication
  VERSION = "0.1.0"
  struct Command
    include Clip::Mapper
    getter name : String
  end
  def self.run
    begin
      command = Command.parse
    rescue ex : Clip::Error
      puts ex
      return
    end
    if command.is_a?(Clip::Mapper::Help)
      puts command.help
    else
      hello(command.name)
    end
  end
  def self.hello(name : String)
    puts "Hello #{name}"
  end
end
Myapplication.run
We defined an attribute name with a String type and no default value.
Clip maps it to an argument, as we already saw.
Let's enjoy it again :)
$ shards build
Dependencies are satisfied
Building: myapplication
$ ./bin/myapplication --help
Usage: ./bin/myapplication [OPTIONS] NAME
Arguments:
  NAME  [required]
Options:
  --help  Show this message and exit.
$ ./bin/myapplication Alice
Hello Alice
$ ./bin/myapplication
Error:
  argument is required: NAME
An explicit argument¶
Like options, we can also explicitly declare our attribute as an argument with the annotation Clip::Argument.
require "clip"
module Myapplication
  VERSION = "0.1.0"
  struct Command
    include Clip::Mapper
    @[Clip::Argument]
    getter name : String
  end
  def self.run
    begin
      command = Command.parse
    rescue ex : Clip::Error
      puts ex
      return
    end
    if command.is_a?(Clip::Mapper::Help)
      puts command.help
    else
      hello(command.name)
    end
  end
  def self.hello(name : String)
    puts "Hello #{name}"
  end
end
Myapplication.run
It still behaves the same:
$ shards build
Dependencies are satisfied
Building: myapplication
$ ./bin/myapplication --help
Usage: ./bin/myapplication [OPTIONS] NAME
Arguments:
  NAME  [required]
Options:
  --help  Show this message and exit.
$ ./bin/myapplication Alice
Hello Alice
$ ./bin/myapplication
Error:
  argument is required: NAME