2015年06月

オプショナルは、空の状態を持てる変数だ。空はnilで表せる。
変数宣言の型の後に?を付ける

var hoge:Int?
hoge = nil

var hoge2:Int
hoge2 = nil       // エラーになる。

オプショナルをそのまま使うとエラーになる。nilかどうかチェックしてnilでなければ変数に!をつけて値にアクセスできる。

var hogeOpt:Int? = 10

if hogeOpt != nil {
    println(hogeOpt!)     // 10が表示される
}

またこう言うふうにも書ける。オプショナルバインディングって言う。

var hogeOpt:Int? = 10

if let hoge = hogeOpt {
    println(hoge)     // 10が表示される
}

また、複数のオプショナルで上記のような処理を行うには、,で複数個指定する。

var hogeOpt1:Int? = 10
var hogeOpt2:Int? = 20

if let hoge1 = hogeOpt1, let hoge2 = hogeOpt2 {
    println("hoge1=\(hoge1), hoge2=\(hoge2)")   // "hoge1=10, hoge2=20"と表示
}

hogeOpt1、hogeOpt2どちらかがnilなら、falseになり表示されない。


このエントリーをはてなブックマークに追加
ブログランキング・にほんブログ村へ
にほんブログ村

複数の値をひとまとめにする機能だ。

let hoge = ("あ", 1)

println(hoge.0)    // "あ"と表示
println(hoge.1)    // "1"と表示

hoge.0、hoge.1でそれぞれの値を参照できる。
hogeは型推論を使っているが、あえて書くと次のようになる。

let hoge:(String, Int) = ("あ", 1)

タプルをバラバラに変数に代入する。

let hoge = ("あ", 1)
let (v1, v2) = hoge
let (v3, _) = hoge   // 1の方が必要なければ"_"(ワイルドカード)を指定しておく

println(v1)    // "あ"と表示
println(v2)    // "1"と表示
println(v3)    // "あ"と表示

hoge.0やhoge.1じゃなく名前で参照することもできる。

let hoge = (str:"あ", num:1)

println(hoge.str)    // "あ"と表示
println(hoge.num)    // "1"と表示

このエントリーをはてなブックマークに追加
ブログランキング・にほんブログ村へ
にほんブログ村

C言語のtypedefみたいなもんだ。
型に別名を与えることができる。

typealias hoge = Int
var a:hoge = 10

このエントリーをはてなブックマークに追加
ブログランキング・にほんブログ村へ
にほんブログ村

ImageDataを使うとHTML5のCanvasにバイト配列でアクセスできる。
idがcanvas1、幅、高さが300ピクセルのcanvasタグがあるものとする。毎度のことですが、コードはTypeScriptだ。

キャンバスからImageDataを取得して、配列にアクセスして緑色にする。取得したデータには取得時のキャンバスに描かれているデータが設定される。

var canvas = <HTMLCanvasElement>$("#canvas1").get(0);
var context = canvas.getContext("2d");

// ImageDataを取得
var imgData = context.getImageData(0, 0, canvas.width, canvas.height);
var w = imgData.width;
var h = imgData.height;
var data = imgData.data;
for (var x = 0; x < w; x++) {
	for (var y = 0; y < h; y++) {
		var index = (x + y * imgData.width) * 4;
		data[index + 0] = 0;     // 赤
		data[index + 1] = 255;   // 緑
		data[index + 2] = 0;     // 青
		data[index + 3] = 255;   // 透明度
	}
}
// ImageDataをcanvasへ書き出す
context.putImageData(imgData, 0, 0);

次に、ImageDataを新規に作るパターンはこれ。100x100のImageDataを作って赤で塗りつぶして書き出している。

var canvas = <HTMLCanvasElement>$("#canvas1").get(0);
var context = canvas.getContext("2d");

// ImageDataを取得
var imgData = context.createImageData(100, 100);
var w = imgData.width;
var h = imgData.height;
var data = imgData.data;
for (var x = 0; x < w; x++) {
	for (var y = 0; y < h; y++) {
		var index = (x + y * imgData.width) * 4;
		data[index + 0] = 255;     // 赤
		data[index + 1] = 0;   // 緑
		data[index + 2] = 0;     // 青
		data[index + 3] = 255;   // 透明度
	}
}
// ImageDataをcanvasへ書き出す
context.putImageData(imgData, 0, 0);

このエントリーをはてなブックマークに追加
ブログランキング・にほんブログ村へ
にほんブログ村

Java8では、関数型言語の機能をいろいろ取り入れているようなので試してみた。正直、関数型プログラミングは初心者なので間違っているかもしれないのでこれから書いている内容は鵜呑みにしないようにw
他の投稿が大丈夫かと言うと思い込みで間違っているかもしれないので疑ってかかるようにw

お題は、1から10まで足してみる。

続きを読む
このエントリーをはてなブックマークに追加
ブログランキング・にほんブログ村へ
にほんブログ村

↑このページのトップヘ