各コードに解説いれときました。間違っているかもしれませんが、初心者の手助けになればなと。基本中の基本を知っていること前提です。
※Opera以外のウェブブラウザで以下をブラウズするとボーダーからコードがはみ出る可能性があります。
import std.stdio : writefln; // ライブラリから関数をインポート(関数名を省略すると全てインポート。但し全てインポートすると関数使用時に名前空間も書かないといけない場合がある。) import std.conv : to; import std.string : split; import std.regexp : RegExp,find; void main (string[] args) { // args.length で引数の数を取得できる if (args.length < 2) { return; } else if (find(args[1],r"^[\d\+\-\*\/\% ]*$")) { return; } // 文字列リテラルにrを付けると正規表現用のエスケープシーケンスが使える int symbol = 1,sum = 0; int[string] symbols = ["+":1,"-":2,"*":3,"/":4,"%":5,"**":6]; // 連想配列の初期化。「値の型[キーの型] 変数名」。キーと値はコロン(:)で区切る。 auto number = RegExp(r"^[\+\-]?\d+$"); // 正規表現パターンの生成。Perlのqrみたいなもの? auto express = split(args[1]," "); // autoは変数を戻り値の型として初期化する foreach (string exp; express) { // 配列ループ。expに値が入る。「int i,string exp; express」のようにするとiに配列のポインタが格納される。連想配列の場合はキーが格納される。 if (!exp.length) { continue; } else if (exp in symbols) { symbol = symbols[exp]; } // 連想配列「symbol」に expが存在するかどうかを真偽で返す else if (!find(exp,number)) // Perlのindexの正規表現版。見つかれば何文字目か、見つからなければ-1を返す。 { sum = calculate(symbol,sum,to!(int)(exp)); } // to!(int)(exp)はCでいう「atoi」。char*(string)型となっている数値をint型に変換する。 } writefln("%d",sum); } int calculate (int symbol,int x,int y) { return symbol == 1 ? x + y : symbol == 2 ? x - y : symbol == 3 ? x * y : symbol == 4 ? x / y : symbol == 5 ? x % y : symbol == 6 ? involute(x,y) : 0; } int involute (int x,int y) { int count,sum = x; for (count = 1; y > count; count++) { sum *= x; } return sum; }Ubuntuの場合D Programming Language - DownloadからVersion 2のUbuntu版をダウンロードしてパッケージインストーラでインストール。
コマンドラインのpwdコマンドでカレントディレクトリを取得して、カレントディレクトリに上のソースを保存した「c.d」を置く。後はコンパイルして実行するだけ。
$ dmd c // コンパイル $ ./c "18782 * 2" // 実行 // $ dmd -run c でコンパイル・実行を一度に行えます(ネイティブコードの保存はされない)何と返ってくるかはお分かりの通り。
D言語はC言語の後継となるように設計された言語で、メモリ管理を自動でやってくれます。コンパイルも高速です。
文字列操作も簡単で(C++との文字列操作の比較)正規表現も標準で使えます。
CGIを使ったWebアプリケーションの作成もC言語の数倍、数十倍楽なんじゃないかと。
認知度が低く、日本向けのドキュメントが少ないのが難点。でも文法は比較的簡単なので、是非遊んでみてもらいたいです。
今後GolangとD言語のどちらが主流になっていくのか期待。C言語のままなのかなぁ・・・。
D言語とはなんぞや?
D言語の魅力
D言語基礎文法最速マスター
プログラミング言語 D 2.0
D はシステムプログラミング言語です。 CやC++の高いパフォーマンスと、RubyやPythonのような現代的な言語がプログラマにもたらした生産性とを、 併せ持つことに焦点をあわせています。 特に、品質保証、ドキュメンテーション、管理、可搬性、信頼性 を実現することに留意して設計されています。
※ググってみたところ64bitでも動くらしい(完全ではなさそう)
0 件のコメント:
コメントを投稿