読者です 読者をやめる 読者になる 読者になる

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>…

Java で TryParse

なんか「Java TryParse」とかで辿りつく人がそこそこいるみたいなんだけど・・・ Commons Lang の MutableInt とかを使えばいいと思うよ。 public static boolean tryParse(String str, MutableInt result) { try { int i = Integer.parseInt(str); result.s…

Java っぽい本を積んでみた

内容はまた後で。 なんか違う本が混じってる?気のせいです>< 取消線が入ってるのは「読むな危険」、タイトルしかないものは「他にいい本があるか古いか興味の対象外」、それ以外はそれ以外です。 もうちょっと詳しく知りたければコメントかなんかで聞いて…

LinkedList の途中への挿入の効率

連結リストの挿入は O(1) ってのに異論はないんだけど、挿入場所が分かっていなければ O(1) じゃなくて O(n) になるってのは忘れられがち・・・というか、下手したら認識されてさえいない。 例えば List#add(int index, E element) の効率だけど、これは ind…

Java データ構造とアルゴリズム基礎講座

Java データ構造とアルゴリズム基礎講座作者: 長尾和彦出版社/メーカー: 技術評論社発売日: 2008/12/26メディア: 大型本購入: 4人 クリック: 164回この商品を含むブログ (13件) を見るえー、結論から言うと、正直微妙。でもまぁ、安いし薄いし、こんなもんか…

値渡しと参照渡し (と参照の値渡し)

値渡しと参照渡しは、分かってしまえば何も難しいところはないんだけど、分かるまでにちょっとした壁があるというかなんとうか・・・ てことでちょっとまとめておきますねー 値渡し (call-by-value) と参照渡し (call-by-reference) の違い 値渡しと参照渡し…

CleanCode Chapter 4:Comments

Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin Series)作者: Robert C. Martin出版社/メーカー: Prentice Hall発売日: 2008/08/01メディア: ペーパーバック購入: 1人 クリック: 62回この商品を含むブログ (21件) を見るこの前…

イディオムとか定型的な書き方だとかをどう勉強したのか忘れてしまった

例えば、ファイル入出力だとか、文字列と数値の相互変換だとか、そういったものって一体何で勉強したんだったか・・・ 多分、最初のうちは分からないことがあったらその都度 Google 先生に聞いていたんだったと思う。 ある程度プログラムが組めるようになっ…

CleanCode Chapter 3:Functions

Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin Series)作者: Robert C. Martin出版社/メーカー: Prentice Hall発売日: 2008/08/01メディア: ペーパーバック購入: 1人 クリック: 62回この商品を含むブログ (21件) を見るChapter…

Java やってる人が C# を使うとはまること

ここでは、Java SE 5.0 以降を知っている人が C# 2.0 を使うことになった場合を考える*1 *2。 あと、ライブラリについては触れないことにする*3。 命名規約 まず、命名規約が全然違う。Java ではメソッド名にキャメル形式*4を使うけど、C# では Pascal 形式*…

ローカルクラスの意義

矢野勉さんの Wicket 本を買ってきて読んでいたんだけど、ちょっと気になる記述があった*1。 MyDropDownChoice を定義している場所に注目してください。このクラスは HomePage クラスのコンストラクタの中で定義されています。このように Java ではメソッド…

ファイナライザ

ファイナライザは、使うとこんなすばらしいものだから使うんです!というものじゃなくて、仕方なく使うもの。 基本使っちゃ駄目だけど、使わなきゃならないところ*1は仕方ないよね、ということで割り切って考えるのがいいんじゃなかろうか。 あと、C++使いに…

gotoがいやならメソッドを使えばいいじゃない

同僚の人はフラグを使ったやりかた 〜プログラムは略〜 や、例外を使ったやりかた 〜プログラムは略〜 で、いままでやってきたらしい。 なんで?って聞いたら、goto絶対ダメ派なんだそうな。 ラベル付きbreakはgotoじゃないと思うけど、なかなか納得してくれ…

本の数(Amazon)

Amazon.co.jpで、和書で検索した結果、 Java 1,434件 C++ 425件 C# 133件 Javaの結果にJavaScriptも含まれているからそのままの数字をあてにしないように。 ただ、それにしたってJavaは多いな。 Amazon.comでも検索してみた。 Java 66,898Results C++ 21,476…

インターフェイスのメソッドにOverrideアノテーションをつける

Java SE 6以降では、Overrideアノテーションがインターフェイスからのメソッドにも付けられるようになったけど、インターフェイスからのメソッドは実装しなければ1.4以前でもコンパイルエラーになるし、何でこの機能が追加されたかわからなかった。 その疑問…

Effective Java第2版 購入

Effective Java 第2版 (The Java Series)作者: Joshua Bloch,柴田芳樹出版社/メーカー: ピアソンエデュケーション発売日: 2008/11/27メディア: 単行本(ソフトカバー)購入: 69人 クリック: 863回この商品を含むブログ (255件) を見る ジュンク堂にて購入。…

Effective Java第2版

日時 書名 出版社 ISBN 価格(税込) 11月21日(金) Effective Java 第2版 ピアソン・エデュケーション 978-4-89471-499-1 3,780 最近発売の書籍(2008年11月1日〜2008年11月21日) おー、ついにきた。 Effective Java 第2版 (The Java Series)作者: Joshua Bloch…

流れるようなインターフェイス+ジェネリクス

ただ、静的な言語の場合はクラスを継承してメソッドを追加する場合に問題がある。 それは、while() や orderBy() や limit() の戻り値の型が Query のままなので、これらのメソッドの戻り値に対して追加したメソッドがそのままでは呼び出せないということだ…

コレクションイニシャライザとインスタンスイニシャライザ

C#3.0のコレクションイニシャライザを見て、Javaのインスタンスイニシャライザ*1に似ているな、と思った。 まず、C#3.0のコレクションイニシャライザはこんな感じ。 var list = new List<string> { "hoge", "piyo" }; で、Javaのインスタンスイニシャライザはこう。 </string>…

単純なソートはどれが一番単純か

主に行数的な意味で。 Javaで書いてみた。 private static void swap(int[] target, int index1, int index2) { int tmp = target[index1]; target[index1] = target[index2]; target[index2] = tmp; } // 挿入ソート public static int[] insSort(int[] tar…

Nimbusを試してみた

とりあえずコンポーネントをぽちぽちと配置して、mainメソッドの先頭で UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); とすればOK おぉ、かっこいい。Swing Metalとの差は歴然だな。 追記: C:\Program Files\Java\jdk1.6…

インスタンスフィールドを使用しないprivateメソッドはstaticか非staticか

正直、考えたこともなかったw まぁ、そのメソッドがやってる処理の意味によるのかな。 インスタンス(this)に関係ありそうな処理なら非staticだろうし、クラスに関係ありそうな処理ならstaticにする、みたいな。 とりあえずこれが今の自分の結論。