「D言語」の版間の差分

→‎Hello World!: ln https://paiza.io/projects/_o3x1t3sxSWATer0QsDecA?language=c ; cleanup
(→‎Hello World!: <syntaxhighlight lang="D" start=nnn line>)
(→‎Hello World!: ln https://paiza.io/projects/_o3x1t3sxSWATer0QsDecA?language=c ; cleanup)
タグ: 2017年版ソースエディター
 
== Hello World! ==
まずは環境がちゃんと動くか試してみましょう。例として、[[w:ハローワールド|"Hello World!"という文字列を表示させる]]プログラムを作ってみることにします。テキストファイルを新しく作り、hello.dという名前にしたらテキストエディタで以下のように編集します。
 
;[https://paiza.io/projects/_o3x1t3sxSWATer0QsDecA?language=c hello.d]:<syntaxhighlight lang="D" line>
;hello.d
<syntaxhighlight lang="D" line>
import std.stdio;
 
 
さぁ、これを動かしてみましょう。
<syntaxhighlight lang="Dbash" line>
$ rdmd hello.d
;$ rdmd hello.d
Hello World!
</syntaxhighlight>
動きましたか?
 
C言語を知っている読者には馴染みの深い見た目ではあると思うが、初心者向けにコードを一行ずつ解説していくことにしましょう。
 
:<syntaxhighlight lang="D" start=1 line>
import std.stdio;
</syntaxhighlight>
:C言語のコード冒頭によくある<code>#include <stdio.h></code>に相当する部分ですが、しかしD言語では仕様の細部が違い、D言語にはプリプロセッサはありません。このコードの意味は「<code>std</code>というフォルダパッケージにある<code>stdio</code>というモジュールをインポートする」という意味です<ref>std.stdio は、core.stdc.stdioを拡張した標準的なI/O関数です。core.stdc.stdioはstd.stdioをインポートする際にパブリッシュされます。</ref>
:さらに意味のわからない単語が出てきましたね。一つずつ解説していきましょう。
:std というフォルダディレクトリーや stdio.d というファイルを作った覚えはないと思います。これらはphobos<ref>⇒ [https://dlang.org/phobos/ Phobos Runtime Library]</ref>という'''標準ライブラリ'''と呼ばれるもので、コンパイラのインストール時に一緒にインストールされたものです。おそらく探せば phobos/ というフォルダディレクトリーが見つかるのではないでしょうか。
:stdio.d にどのような内容が書かれているのか気になる方は、直接覗いてみるのも良いでしょうが、[https://dlang.org/phobos/std_stdio.html ここ]に定義の一覧が載っていますので、こちらを見るほうが良いでしょう。
:「モジュール」という言葉について。D言語では「ソースコードが書かれた一つのファイル」のことを指します。
:「インポート」とは、そのモジュール(この場合は<code>std.stdio</code>)に書かれているシンボルの定義全て(シンボル表)を今のモジュール(この場合は<code>hello.d</code>)から使えるようにする、という意味です。5行目に "writeln" というのがありますね。"writeln" は <code>std.stdio</code> で定義されているのです。
 
:<syntaxhighlight lang="D" start=3 line>
void main()
</syntaxhighlight>
:D言語のプログラムのエントリーポイントは必ず main 関数です。D言語ではC言語と同じように、地の文に直接処理を書き込むことはできません。しかしそうするとプログラムの実行を指定できないため、プログラムが起動されるときは main 関数を呼ぶ、と決まっているのです。
 
:<syntaxhighlight lang="D" start=4 line>
{
</syntaxhighlight>
:D言語では、<code>{ }</code> で囲まれた文のことを「ブロック」、「スコープ」と呼び、そこには文を書き並べることができます。「ブロック」は「スコープ」をもちます。このブロックは関数<code>main</code>に属し、この関数の処理を表しています。
 
:<syntaxhighlight lang="D" start=5 line>
writeln("Hello World!");
</syntaxhighlight>
: <code>;</code> は、必ず文末につけなければなりません。
 
:<syntaxhighlight lang="D" start=6 line>
}
</syntaxhighlight>
1,819

回編集