Java

Optionalは引数に使うべきでない、という幻想について

継続渡しすると戻り値は引数になるから「Optional は戻り値にのみ使うべき」というルールは無意味だよ、という話。 あ、そういう話ね、と分かった方はこれ以上読む必要はありません。 Mono が Async + Optional + 例外という欲張りパック状態なのも問題です…

re:僕にとってMaybe / Nullable / Optional が、どうしてもしっくりこないわけ。

元ネタ: 僕にとってMaybe / Nullable / Optional が、どうしてもしっくりこないわけ。 - 亀岡的プログラマ日記 OOPの文脈で見ると、元の記事が言っていることもわからなくはないのですが、対象が広すぎていろいろと不正確になってしまっているので、ちょっと…

2つのOptionalで分岐する

僕のOptional<>の使い方がカッコワルイ。 - 谷本 心 in せろ部屋にある最後の例ですが、 2つのOptionalの組み合わせによって処理を分岐させるコードが幾つか載っています。 ifで書いた例を見てみましょう。 public String hello(Optional<String> name1, Optional<String> na</string></string>…

なごやかJavaで発表してきた

.NET系開発者から見たJava from bleis tift なごやかJava第一回で、「.NET系開発者から見たJava」というタイトルで発表してきました。 Javaのこの機能って.NET開発者から見てどうなの?というような内容です。 大阪から参加してくれた方の感想を載せておきま…

JavaでTupleってみる

可変長な型変数の表現より、タプルの話です。 .NETのタプル .NETでは、型引数の数が違うクラスを定義できるので、Tupleという名前で7要素まで対応しています。 public class Tuple<T1> { ... } public class Tuple<T1, T2> { ... } public class Tuple<T1, T2, T3> { ... } public cl</t1,></t1,></t1>…

C# 使いから見てうらやましい Java8 の default 実装の使い方

Java8 から追加されるインターフェイスの default 実装ですが、C# の拡張メソッドに似てますよね。 実際、このどちらも「シンインターフェイス」を定義するだけで「リッチインターフェイス」が手に入ります。 しかし、C# の拡張メソッドと Java のインターフ…

遅延評価いうなキャンペーンとかどうか

遅延評価については以前も書いてるんですが、そのときは結論なしでした。 が、ちょっと考えるところがあって、言語を Java に絞って自分の考えを明確にしておきます。 結論から書きましょう。 「Java(とC#) で遅延評価って書いてあるものは遅延評価ではない…

null の扱い

Maybe つながりで、色んな言語の null の扱いについてちょっとだけまとめてみた。 観点は一つ、「this が null の場合に this の指す先にアクセスしないメソッドが呼び出せるか」です。 C++ #include <iostream> struct hoge { void f() { if (this == 0) std::cout <<</iostream>…

Maybe のエントリの補足

昨日書いたJava の語彙で Maybe を説明してみる - ぐるぐる〜に予想以上の反響があってびっくりです。 色々反応もらったので、ちょっと補足を。上のエントリを読んでない人は読んでからどうぞ。 @CheckForNull でいいのでは? はい、確かに FindBugs の Chec…

Java の語彙で Maybe を説明してみる

java-jaで例外処理の話をしてきました - 西尾泰和のはてなダイアリーを読んで。 Maybe は値があるかないかを型で表すことができます!そう、直和型なんです!とか言われてもイミフだと思うのです(リンク先のエントリがそう説明してるわけではないですが)。 J…

アンダーバーって便利ですよね

public enum Unit { _ } とか、 // 2要素タプル public final class _2<T1, T2> { ... } // 3要素タプル public final class _3<T1. T2, T3> { ... } ... とか。 F のメソッド名も _ だし、Map リテラル用のメソッドも _ で。</t1.></t1,>

Java で Map リテラル (もどき)

上のは冗談ですが、こっちは割と本気です。 コレクションのリテラルについては コレクション (List, Set, Map 等) の生成の簡略化 - ぐるぐる~ とかで言及しているんですけど*1、Map については「これだ!」というものがありませんでした。 ですが、最近自…

Java で map や filter

現在の Java にはラムダ式が無いので、map や filter をやろうとすると割とひどいことになります。 例えば、 public interface F<Arg, Ret> { Ret _(Arg a); } というインターフェイスを用意して、 public class Op { public static <T, U> List<U> map(List<T> xs, F<T, U> f) { List<U> re</u></t,></t></u></t,></arg,>…

Java で順列リテラル?

このエントリは Java Advent Calendar -ja 2010 : ATND の 2 日目のものです。ネタです。 みなさん Java では true や false や null がキーワードではなく、リテラルだというのはご存じだと思います。 では、「え、そんなリテラルあるの?」というリテラル…

Hudson の Git Plugin を使うと文字化けする問題とその解決方法 (不完全)

こちらも仕事で Hudson と Git を使い始めた頃から気付いたんですが、ちょうどいい機会なので直してみます。 文字化けするのは、Hudson の Web 画面から確認できるコミットメッセージです。 始める前に ここで紹介する方法は、プラグインのクラスファイルの…

Hudson の NUnit Plugin を使うとテストケースの数が減る問題とその解決方法

仕事で Hudson を使い始めた頃 (去年の 10 月だか 11 月だか) から、NUnit のテストケースが実際よりも少なくなってしまう問題は認識していましたが、あまり気にしていませんでした。 しかし今回、かなりの数のテストケースが削られていたため、ちょっと調べ…

TDD Boot Camp の参加報告とか読んで

TDD Boot Camp には行っていないんだけど、参加者のエントリを色々読んで触発されたので思っていることをちょこっと書いておきます。 日曜日は id:a-hisame に無理言って色々と聞いた*1しね! 以下引用が多くて微妙に長文。 アクセス修飾子 デモ:cobertura…

コンストラクタで final なフィールドをあきらめない方法

思いつきエントリ。後で説明とか付け加える予定。付け加えた。 final なフィールドは基本的にコンストラクタ内部で初期化することしか出来ない。 でも、そのフィールドを初期化する方法が複雑な場合、素直に実装するとコンストラクタがどんどんふくれあがっ…

asList のシグニチャとジェネリクス

asList に関しては前にも苦言を呈しているんですが・・・ 返されるリストは直列化可能で、RandomAccess を実装します。 Oracle Technology Network for Java Developers とか書いてあるんですよねー。 なら、シグニチャは public static <T> List<T> asList(T... a</t></t>…

final について?

final 周辺について。理想論?いや、理想論大事。 OCP (Open-Closed Principle) 開放閉鎖原則とも。 簡単に言うと、モジュール (ここでは class) は拡張できるべきだが、修正は行うべきではない、という原則。 これを原則に従うと、(もっと一般的な意味での)…

もう少し柔軟な assertThat が欲しい

assertThat と hamcrest の組み合わせって便利ですよねー。 assertThat と hamcrest の組み合わせについては、 JDaveの寄り道にhamcrestを試してみる。 - Fight the Future とか、 hamcrestのMatcherメモ - 都元ダイスケ IT-PRESS とか見てもらえば大体分か…

入れるとしたら・・・

上のエントリの続きだけど、入れるとしたら、コレクションリテラルっぽい書き方が出来るユーティリティクラスですかねぇ・・・ あとは、コレクションフレームワークを設計しなおして欲しい*1のと、リソースを保持するクラスを設計しなおして欲しい。 設計し…

それより先に・・・

Sun MicrosystemsのJoe Darcy氏が9日(太平洋夏時間)、OpenJDKのcore-libs-devにおいてWhat methods should go into a java.util.Objects class in JDK 7?のタイトルのもとJDK7のjava.utilパッケージに追加したいAPIの募集をかけている。 JDK7、追加するユー…

Java の enum

イマドキの Java には enum があるんですよ実は、という話。 知ってるよそんなこと!な人は読むまでもないかも。 enum って? 列挙型のこと。C とか C++ とか C# とかでおなじみのアレ。 単純な enum は Java でもこれらの言語の enum と同じような記述にな…

コレクション (List, Set, Map 等) の生成の簡略化

Java SE 7 ではなんかコレクション用のリテラルが入るとか入らないとかあるみたいだけど、個人的には別にそこまで欲しくはない (もし導入されればおいしくいただきますよ?)。 マップリテラルは欲しい。いや、やっぱりそこまで欲しくない (もし導入されれば…

Java を使うなら覚えておいて欲しい書き方 - 配列・リスト・マップ

元ねた:Javaを使うなら必ず覚えておきたいデータ構造 - 配列・リスト・マップ - いろいろ解析日記 なんか色々と足りないよね、ってことで、色々と補足を。 配列 配列の生成 配列に含める要素が既に分かっている場合、例えば、 String[] strs = new String[2…

オーバーロードの落とし穴

にはまった。 Commons IO の org.apache.commons.io.filefilter 以下に存在するクラス群 が FileFilter も FilenameFilter も実装しているので、直接 new して File#listFiles に渡せない・・・ 何でかって言うと、File#listFiles はオーバーロードされてい…

文字列の結合

実はこの前 (正確には今日) まで、 Javaの文字列連結パフォーマンスクイズ Javaの文字列連結パフォーマンスクイズ解答編 を信じていたんだけど・・・ やっぱり自分で調べてみるもんですね。 文字列連結演算子 + (§15.18.1) の演算結果がコンパイル時の定数 (…

リソースを保持するクラスの設計指針 (案)

例外について色々と考えてみた - ぐるぐる〜の 「例外と RAII イディオム」での考えた、「tryOpen 方式」をもう少しだけ煮詰めてみる。 リソースを保持するクラスはコンストラクタで例外を投げない Java では、リソースを確実に解放するために、try-finally …

型パラメータを引数の型に持つメソッドのオーバーロード

後で調べるためにメモ (あ、かわりに調べておいてくれても全然問題ないです)。 // これはエラー public static <L extends List<String> & RandomAccess> String join(L strs, String separator) { ... } public static String join(List<String> strs, String separator) { ... } // 制約の</string></l>…