はじめに
D言語のUFCSについて気になったことを適当に書いていきます。メモ書きなので、てきと~ですが気が向いたときに適宜更新。(完全に他サイトの引用集です 笑)
UFCSについて
参考: D言語のUFCSが好きだ!
よく使われるモジュール
std.algorithm
std.algorithmのコマンドを使ってメソッドチェーンを使っている人が多い気がします。あとで自分もまとめたいと思っていますが、mapとか調べれば出てくるかと。
プロパティ
プロパティとは型やオブジェクトの特徴や特性を表わすものです。これをちゃんと付けてあげないと要素がコピー出来ないなんてことがよくあります.
詳しいことは参考にありますがここでは要素をコピーするのに必要なプロパティをまとめておきます。
- .dup
- 配列を確実にコピーするときに
- .array
- Rengeを配列に変換する.これがなくてうまくうごかないこともあり
参考:
プロパティ
配列
D言語友の会-プロパティ
コード集
C++でいうresize(size,'a')の処理
//'a'をn回繰り返した配列を作る
char[] str = 'a'.repeat(n).array;
テキスト入力
import std.file, std.string, std.algorithm, std.array;
//チェインメソッドを使わない処理
string[] text = splitLines(readText("text.txt"));
string[] hoge;
foreach(int i; text){
hoge[i] = text[i];
}
//最初にデータをすべて読み込んで一気に分割する方法
//対象ファイルが大きいと結構メモリを食うらしい
string[] text2 = splitLines(readText("text.txt")).map!strip.array;
//各行を順々に処理
auto strippedLines = File("text.txt").byLineCopy().map!strip.array;
参考: 弱小PHPerのD言語挑戦記4
キーボード入力?
import std.string, std.algorithm, std.array, std.conv;
//任意の要素をint型に変換して格納
//入力するときはスペースで区切る
//もっといいやり方あるよね...
string[] input = readln().split;
int num = input[0].to!int;
//intの配列に代入
int[] a = readln().split.map!(to!int).array
※readln()について
buf = readln()という形にするよりreadln(buf)のほうが高速らしいです