-- / --
--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

04 / 26
Sat

Ziphil です。

さて、 実は私、 大学 1 年です。 まあ、 活動内容に関わらず、 ハンドルネームは Ziphil で統一していますから、 私の Twitter やもう 1 つのホームページなどを見たことがある人なら、 もう知っていることかもしれませんが。 で、 なぜ突然よく分からないカミングアウトをしたかというと、 忙しいんです。 つまり、 趣味の時間があまり取れないんです。 主に数学とフランス語とロシア語のせいで。

というわけでですね、 膨大な時間がかかることが予想される 『Eminentia』 ですが、 おそらく開発は中止となります。 だからといってゲームを作らないわけではありません。 使える時間がそれなりでも作れるようなゲームを、 趣味として作っていこうかなと思っています。

正直、 私は工学部に進んだりゲーム会社に入社したりする気はありませんので、 ゲーム制作はあくまで趣味の範囲です。 ですから、 また開発が頓挫になる可能性は大いにあります。 まあ、 期待せずにこのブログを読んでくれると助かるなー、 という感じです。


スポンサーサイト
comment ×0
04 / 26
Sat

もう 4 月も終わりか…、 という感じの Ziphil です。

いつの間にか Java8 がリリースされていました。 どうやら、 ラムダ式が追加されたみたいで、 これは Rubyist である (だった?) 自分には嬉しい仕様です。 どんなのかというと、 こんなのです。

List list = Arrays.asList("foo", "bar", "baz", "hoge", "huga");
list.forEach((String s) -> {
  String data = "[" + s + "]: " + s.length();
  System.out.println(data); 
});

map とか filter とか reduce とかもちゃんとあります。 ただし、 この場合は一度コレクションを Stream オブジェクトに変換しないといけません。 これがちょっと面倒。

List list = Arrays.asList("foo", "bar", "baz", "hoge", "huga");
String result = list.stream().filter((String s) -> {
  return s.length() > 3;
}).map((String s) -> {
  return s.toUpperCase();
}).reduce((String s, String t) -> {
  return s + ", " + t;
}).get();
System.out.println(result);

ラムダ式では型推論が働いてくれるので、 引数の型は省略できます。 また、 ラムダ式を 1 行で書くばあいは return 文も不要です。 さらに、 引数が 1 つだけの場合は、 引数の前後のカッコも省略できます。 ・・・ということで、 上のプログラムは下のようにも書けます。

List list = Arrays.asList("foo", "bar", "baz", "hoge", "huga");
String result = list.stream().filter(s -> s.length() > 3).map(s -> s.toUpperCase()).reduce((s, t) -> s + ", " + t).get();
System.out.println(result);

Ruby を長いこと使ってきた私にとっては、 こう書けると非常に親近感がわきます。 Ruby だとこんな感じで、 似てますからね。

list = ["foo", "bar", "baz", "hoge", "huga"]
result = list.select{|s| s.length > 3}.map{|s| s.upcase}.reduce{|s, t| s + ", " + t}
puts result

さて、 この Java のラムダ式ですが、 実装はどうなっているかというと、 ただの匿名クラスです。 たとえば、 Stream#filter の引数の型は Predicate<T> です。 つまり、 Java がラムダ式を Predicate<T> を継承した匿名クラスに勝手に変換してくれるイメージです。 ちなみに、 Predicate<T> は T 型の引数をとり Boolean 型を返すラムダ式に相当します。

ということで、 今までラムダ式とかクロージャとか、 そういう類のものが使えないせいで、 for 文が嫌いな私は Ruby とか Scala とか Groovy とか Kotlin とか Fantom とか Xtend とかに逃げてましたが、 その必要もほとんどなくなりましたね。

あ、 そうそう、 ラムダ式の変換先となる関数型インターフェースには、 引数の型や返り値の型などによって Supplier とか Consumer とか Prdicater とかいろいろあるんですが、 プリミティブ型専用に IntSupplier とか IntConsumer とかがあるんですよね。 それならプリミティブ型廃止すれば良いのに!


comment ×0
04 / 19
Sat

細々と生きております、 Ziphil です。

私が (最低限は) 使える言語というと、 だいたい 10 種類ほどあるわけですけど、 どういうわけか C 系列だけ全く使えないんですよ。 理由は諸説ありますが、 C をちょっと学んでみると、 Ruby の方がプログラムをきれいに書けることに気づいてしまい、 C が捨てられると、 まあそんな感じでしょう。

で、 たぶん C とか C++ とか C# には縁がないんだろうなー、 とか思っていました。 思っていたんですが、 紆余曲折あって C# を学ぶ (そして人にある程度教える) ことになってしまいました。

ということで、 Visual Studio Express を急遽ダウンロードしたのが一昨日、 C# を勉強し始めたのが昨日。 で、 ついさっき、 ゲーム作成の基礎部分 (ウィンドウを表示したり FPS を安定させたり) が完成したわけです。 まあ、 C# はだいたい分かりました。 さすがに Ruby より詳しくはなってませんが、 Java と同程度の能力にはなったと思います。 同じオブジェクト指向言語なので、 難しくはなかったですね。

で、 長年敬遠していた C 系列の言語ですが、 少なくとも C# は悪くないかな、 って感じです。

でも、 ForEach がしっくりきませんね。 Ruby の影響から、 どうも foreach 構文ではなく、 ForEach メソッドを使いたくなるんですが・・・。

Array.ForEach(array, (Foo foo) => {
    DoSomething();
});

・・・とまあ、 そうするとこんな風になるわけですよ。 Array#ForEach じゃなくて Array.ForEach なんですよね。

array.ForEach((Foo foo) => {
    DoSomething();
});

こう書きたいなぁ・・・。 いや、 まあ、 書けるんですけど、 あんまり推奨されませんよねぇ。

そんなわけで、 C# でした。 今後のアプリケーション開発は JRuby か C# かな。


comment ×0
back-to-top
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。