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

削除された内容 追加された内容
Angol Mois (トーク | 投稿記録)
M 節分け
Angol Mois (トーク | 投稿記録)
451 行
=== 契約の使い方に関する注意 ===
'''契約をユーザーの入力のチェックに使ってはいけない'''。契約とは、あくまでも自身が書いたアルゴリズム、コードの正しさをチェックするためのみに存在するものである。関数の定義域を制限したい場合は、Assertion Error ではなく例外やエラーメッセージを残すべきである<ref>Andrei Alexandrescu 著, 長尾 高弘 (翻訳) 『プログラミング言語D』翔泳社 2013年 第一版 10章「契約プログラミング」より</ref>。
 
 
== インターフェース ==
関数を作る時、インターフェースというものによって、型だけを別個、抜き出して指定できる。
 
なんのために使うか疑問に思うかもしれないが、おそらく元ネタになっただろうJavaやC#にインターフェースというものがあり、D言語にもインターフェースという機能がある。(詳しくは[[w:インタフェース (抽象型)]])
 
 
<syntaxhighlight lang="D">
import std.stdio;
 
interface siyou {
int kansuu(int n);
}
 
 
class jissou : siyou {
int kansuu(int n) {
return 4 + n;
}
}
 
 
void main(){
 
int n = 13;
jissou b = new jissou();
writeln( b.kansuu(n) );
 
}
</syntaxhighlight>
 
 
;実行結果
17
 
;解説
関数の型だけでは、何も中身が分からないので、クラスの継承によって、その関数の中身を定義する。
 
C++だと、クラス class と 構造体 struct に互換性があるが、しかしD言語のインターフェースでは class でないといけない。
 
structで試しても、コンパイルがエラーになるだけである。
 
 
;備考
契約プログラミングと合わせてインターフェースを使う事もできる<ref>[http://www.kmonos.net/alang/d/interface.html インターフェイス - プログラミング言語 D (日本語訳)] 2020年7月19日に閲覧して確認</ref>
 
== 参考文献 ==