D言語入門記事 ~Hello World,コメントと式(1)~

アバター
tk-xleader
記事: 158
登録日時: 14年前
連絡を取る:

D言語入門記事 ~Hello World,コメントと式(1)~

投稿記事 by tk-xleader » 13年前

前回の記事に続いて、もはやD言語ユーザー以外から見れば布教記事以外の何物でもないものですけど、続きを書きます。

 そこで、とりあえず、世界で一番有名なプログラム「Hello World」を、C言語と比較しながら考えていこうと思います。

[1] 「Hello World」プログラム

 C言語では、「Hello, world!!」と標準出力に書き出すプログラムコードの一例は、次のようになります。

CODE:

#include

int main(void){
	puts("Hello, world!!");
	return 0;
}
 確認すべきポイントは次の3点です。

(1)C言語のプログラムはmainという名前の関数からスタートすること。
(2)puts関数を使えば、標準出力に文字列を書き出すことが出来ること(厳密には、文字列の最後に改行文字を付加しますが…)
(3)puts関数を呼び出すためには、#includeプリプロセッサ命令によってstdio.hというヘッダファイルを読み込まなければならないということ。

 では、D言語で同様のプログラムを書くとどうなるか? こうなります。

CODE:

import std.stdio;

void main(){
	writeln("Hello, World!!");
}
似てはいますが、違いますね。先ほどC言語のほうで着目した3点について比較してみますが…

(1)D言語のプログラムもまた、mainという名前の関数から始まりますが、D言語では、main関数の戻り値をvoid型にすることが許されます。
(2)文字列を標準出力に書き出すための関数は、writeln()です。この関数もまた、文字列の最後に改行文字を付加します。
(3)writeln関数はstd.stdioというモジュールの中で定義されていて、その宣言を参照する為には、import宣言を用いなければならないということ。

このようになります。特に(3)は、大きな違いです。これはC言語とD言語が、ファイルシステムについてどのように対応しているかということの違いです。C言語の#includeプリプロセス命令は、ファイルの内容をそのまま展開するだけですが、D言語のimport宣言は、モジュール内部の宣言テーブルを参照するだけです。
 D言語における「モジュール」とは、ソースファイルそのものだと思ってもらってかまいません。要するに、D言語では、C言語のヘッダファイルみたいに、コンパイル前にソースコードに内容を一々展開して、毎回コンパイルされることはないのです。import宣言がモジュールの宣言内容のテーブルを参照するだけということは、それだけコンパイルが高速になるということです。
► スポイラーを表示
[2] 標準出力への書き出し

 std.stdioモジュールは、C言語のと同等の目的、つまり、ファイルや標準入出力のIOを担当する標準ライブラリです。標準出力への文字列の書き出しは、write,writeln,writef,writeflnの4つの関数を使います。これらはどのように違うかというと…

write:最も単純な書き出しを行う。引数は可変個で、引数を順番に出力する。
writeln:write(………,"\n")と同じ。要するに、write関数の最後に改行を出力するだけ。
writef:第1引数を書式文字列として、以降の引数を書式に従って文字列に変換して書き出す。
writefln:writef(………,"\n")と同じ、要するに、writef関数の最後に改行を出力するだけ。

なので、実は上のプログラムは、次のように書き換えることが出来ます。

CODE:

import std.stdio;
 
void main(){
        write("Hello, " , "World!!\n");
}
実行結果は最初のプログラムと全く同じです。また、文字列以外、要するに演算結果などの数値を出力したい場合は、書式文字列を扱えるwritef関数やwritefln関数を用いることになりますが、これはC言語のprintfとほとんど同じです。だから、数値256を標準出力に書き出すプログラムは、次のようになります。

CODE:

import std.stdio;
 
void main(){
        writefln("%d",256);
}
実行結果
256

[3] コメント

 ソースコードの中にちょっとしたメモやメッセージを残したいときに使えるのがコメントですが、C言語のコメントは、次の2つの形式ですね。

CODE:

/*  ~
複数行コメント
ネストすることは出来ないです。
~*/
//単一行コメント これは1999年制定規格のC99で正式に認められました。C++では元から認められているよね。
 D言語でもこれらのコメントを使うことが出来ますし、ルールも全く同じです。それらに加えて、D言語にはネスト可能な複数行コメントの形式が加わりました。

CODE:

/+ ~ネスト可能コメント
 /* こんなのが内部にあっても大丈夫*/
 /+ ネスと可能とはこういうこと。これもOK!!+/
 ネストするときには、コメント開始とコメント終端の対応をきっちりとしましょう。~ +/
これは、コードの一部をコメントアウトしたり、サンプルコードをコメントの中に残したいときなどに使える形式です。

[4] 式(1) ~簡単な演算~

 四則演算やビット演算などの基本的な数値演算はほとんどC言語と同じです。プログラム例を見ながら確認しましょう。

CODE:

import std.stdio;

void main(){
	//基本的な四則演算
	writefln("6+3 = %d,6-3 = %d,6*3 = %d,6/3 = %d,6%%4 = %d",6+3,6-3,6*3,6/3,6%4);
	
	//ビット演算
	writefln("1<<1 = %d,1&1 = %d,~1 = %d",1<<1,1&1,~1);
}
実行結果
6+3 = 9,6-3 = 3,6*3 = 18,6/3 = 2,6%4 = 2
1<<1 = 2,1&1 = 1,~1 = -2


 これにとどまらず、C言語で出来る演算とはほとんど同じです。演算子の優先順序も、ほとんどC言語と同じなので、C言語でプログラムが書けるのならば、D言語で四則演算のプログラムが書けないという事は無いと思います。

前の記事「プロローグ」 ←→ 次の記事「識別子の名前、データ型と定数の表現(1)
最後に編集したユーザー tk-xleader on 2012年3月20日(火) 17:57 [ 編集 5 回目 ]

コメントはまだありません。