適応型付け

このパターンの本質は、それらに課せられた制限を通して値のタイプを設定することです。 そして、可能であれば、これらの制限に適合するようにこの値を変更します。



入力の目的は何ですか? エラーの発生を可能な限り早期に、つまり、プログラマーがミスを犯した場所にできるだけ近く、修復不可能な障害を引き起こした場所ではなく、キャッチします。 ただし、型を手動でキャストするのは高価すぎるため、互換性のある型には自動キャストが必要です。 たとえば、「数字のみを含むXより長くない文字列」は、「正の整数」に明確に変換でき、その逆も同様です。



多くの言語では、独自の型を定義できません。 一部の言語ではこれが許可されていますが、表現の手段では不十分なことがよくあります。 ただし、関数のセットを定義できます。各関数は、入力と出力で値を取り、それによって返される値がすべての制限を満たすことを保証します。 同時に、制限に準拠するように値を変換しようとする場合があり、失敗した場合は例外をスローする必要があります。



典型的なtypkasterを定義しましょう:

function aNumber( $val ){<br> if ( !is_numeric( $val ) ) throw new Exception( 'can not convert to number' );<br> return $val= +$val;<br>}<br><br> function aString( $val ){<br> return $val= $val . '' ;<br>}<br><br> function anArray( $val ){<br> if ( is_object( $val ) ) $val= get_object_vars( $val );<br> else if ( !is_array( $val ) ) throw new Exception( 'can not convert to array' );<br> return $val;<br>}





これらは一般的なタイプカスターです。 とにかく型キャストを行うので、ビジネスロジックに合ったより具体的な型を使用する方が良いです。

function anUserId( $val ){<br> aNumber( &$val );<br> if ( $val <= 0 ) throw new Exception( 'user id is not positive' );<br> return $val;<br>}





typkasterは最初にパラメーターの値を変更してから、それを返すことに注意してください。 これにより、次の2つの形式で使用できます。

function example( $count ){<br> aNumber( &$count ); // . <br> return aString( $count + 2 ); // . <br>}<br>$x= example( '2' ); // '4' <br>$y= example( '2x' ); //





適応型付けパターンを実装する典型的な関数は次のようになります。

function xxx( $count= 0, $title= '' , $list= array(), $user= 0, $db= null ){<br> aNumber( &$count ); aString( &$title ); anArray( &$list ); anUserId( &$user ); DB::anInstance( $db );<br><br> var_dump( $count, $title, $list, $user );<br><br> return aString( $count * 2 );<br>}





ただし、おそらくすぐにネイティブサポートがphpに追加され、記録がより便利になるでしょう。

function aString xxx( aNumber $count= 0, aString $title= '' , anArray $list= array(), anUserId $user= 0, DB $db= null ){<br> var_dump( $count, $title, $list, $user );<br><br> return $count * 2;<br>}





実際、自動キャストと新しいデータ型を独立して決定する機能を備えた関数の静的型付けを取得します。 それまでの間、コード生成を使用することは可能ですか?



All Articles