「D言語/関数」の版間の差分

削除された内容 追加された内容
Angol Mois (トーク | 投稿記録)
Angol Mois (トーク | 投稿記録)
編集の要約なし
406 行
契約プログラミングを公式にサポートしている言語はいまのところ少ない。(非標準のライブラリなどでサポートされている言語はそこそこあるが、しかしプログラム言語の標準ライブラリでサポートされている言語は、かなり少ない。)
 
=== 契約の使い方に関する注意 ===
==== コンソール入力との組み合わせの例 ====
'''契約をユーザーの入力のチェックに使ってはいけない'''。契約とは、あくまでも自身が書いたアルゴリズム、コードの正しさをチェックするためのみに存在するものである。関数の定義域を制限したい場合は、Assertion Error ではなく例外やエラーメッセージを残すべきである<ref>Andrei Alexandrescu 著, 長尾 高弘 (翻訳) 『プログラミング言語D』翔泳社 2013年 第一版 10章「契約プログラミング」より</ref>。
readf() などの関数を使うと、キーボードからの入力を受け付けるので、それを使って数値をいろいろと入力して、契約プログラミングのコードをテストしてみよう。
 
==== 悪い例 ====
readf() などの関数を使うと、ユーザーによるキーボードからの入力を受け付けるので、それを使って数値をいろいろと入力して、契約プログラミングのコードをテストしてみようるとする
 
;コード例
449 ⟶ 452行目:
もちろん、プラスの「5」など契約に適合した数値を入れているかぎりは、動作する。
 
これは、「'''契約をユーザーの入力のチェックに使ってはいけない'''」という決まりに反しており、契約の誤った使い方である。もちろん、決まりを破ってでも契約によるエラーメッセージを出したい理由があるならばそうすることもできるが、特段の理由がない限りは避けるべきである。
=== 契約の使い方に関する注意 ===
'''契約をユーザーの入力のチェックに使ってはいけない'''。契約とは、あくまでも自身が書いたアルゴリズム、コードの正しさをチェックするためのみに存在するものである。関数の定義域を制限したい場合は、Assertion Error ではなく例外やエラーメッセージを残すべきである<ref>Andrei Alexandrescu 著, 長尾 高弘 (翻訳) 『プログラミング言語D』翔泳社 2013年 第一版 10章「契約プログラミング」より</ref>。
 
== 参考文献 ==