関数のパラメーターに特定の属性をつけることで、内容に宣言的に制限をかけることができます。宣言的にというのが重要で、つまり、パラメーターの内容をチェックするためのコードを書かなくてもよいということです。本記事では、そうした属性についてまとめます。型を含まないものとします。保持することができません。代入すると空文字列に変換されます。なるのですが、まぁそれはこの際置いておきましょう。$x)}まず基本はこれです。パラメーターをセットすると、そのパラメーターを必須として宣言することができます。指定したパラメーターはどうなるかと言うと...パラメーターを指定せずにコマンドを呼び出そうとすると、その場で入力を促されます(デフォルト値は無視されます)。指定することが禁止されます。パラメーターの型が文字列型の場合、空文字列を指定することが禁止されます。パラメーターの型が配列型の場合、空の配列を指定することが禁止されます。含むことが禁止されます。パラメーターの型が文字列型の配列の場合、配列の要素に空文字列を含むことが禁止されます。含む配列は渡すことはできます。含む配列は禁止されますが、空文字列を含む配列は渡すことができます。指定は型指定しないと思うように作用しないので、必ず型指定するべし」と覚えておいた方が良いでしょう。型であっても必ず明示し、型の省略はしない方が良いでしょう。「空の配列を含む配列」は禁止されません。指定は、かなり広範にわたる制限がかかります。指定の制限を部分的に緩める属性が用意されています。指定していないパラメーターに対しては効果がありません。含めることが許容されます。保持できないので、文字列型のパラメーターに対してこの属性は効果がありません。指定したパラメーターに対して、パラメーターの型が文字列型の場合、空文字列を指定することパラメーターの型が文字列型の配列の場合、その要素に空文字列を含めることが許容されます。指定したパラメーターに対して、空のコレクションを指定することを許容します。指定とは関係なく使用できる属性です。指定していない(つまり、呼び出し時に省略可能な)パラメータですが、使用する場合はこの制限を満たさなければならないというものです。変数にも付与することができます。''というのは禁止されます。属性を追加できません。系属性はパラメーターの型に関係なく、パラメーターの値のみを見て動作します(だからといって型を指定しなくてもよいというわけでは、もちろんありません)。系属性が優先されます。指定することを禁止します。含むことが禁止されます。指定することが禁止されます。パラメーターの値の型が文字列型の場合、空文字列を指定することが禁止されます。パラメーターの値の型が配列型の場合、空の配列を指定することが禁止されます。含むことが禁止されます。パラメーターの値の型が文字列型の配列の場合、配列の要素に空文字列を含むことが禁止されます。同様、空の配列を含む配列は禁止されません。属性パラメーターの値の型が配列型の場合、その要素数の最小と最大を指定します。配列型でない場合は指定できません。以下の配列でなければなりません。$x)}上限または下限のみを指定する方法は提供されていませんので、適当な上下限値を指定する必要があります。下限のみ指定したい場合は、以下のようにすることが考えられるでしょう。$x)}なお、この属性は、入れ子になっている内部の配列の要素数には影響しません。属性パラメーターの値の型が文字列型、または文字列型の配列の場合、その最小または最大の長さを指定します。それ以外の型に対しては使用できません。文字以下の文字列でなければなりません。文字以下の文字列でなければなりません。プロパティが返すもののことを言います。サロゲートペアや合成文字の場合、見た目の文字数とは一致しない点には注意が必要です。属性パラメーターの値の上下限を指定します。数値型だけでなく、文字列にも使うことができます。配列型の場合は、個々の要素についてチェックします。以下でなければなりません。小さい文字列でなければなりません。$x)}ただ、文字列の大小比較のルールはよくわかりません...。渡すことができません。