技術開発日記

技術やら日々思ったことを綴ってます。

インスタンス変数・クラス変数・クラスインスタンス変数

インスタンス変数、クラス変数、クラスインスタンス変数。 この3つの変数に関してスコープとか参照方法がいまいちわからなかったので、ちょっと調べてみた。 class Sample #クラス変数 @@var1 = 1 #クラスインスタンス変数 @var2 = 2 def initialize #インス…

ConcurrentHashMapという選択

最近「java.util.HashMap」がスレッドセーフじゃないことを知って それについていろいろ調べてみた。まず、「java.util.HashMap」はスレッドセーフじゃないから、複数スレッドが並行してHashMapにアクセスする場合はハッシュテーブルの破壊とか無限ループ、…

AtomicInteger

JDK1.5からスレッドセーフなクラスが色々と追加されているみたい。 中でも、AtomicInteger とかは便利で使い所が多いかも。 下はスレッドセーフな値を更新するサンプル今までの実装 class Atomic { private int count = 0; public synchronized void add(int…

Rubyでのstaticメソッド

ずっとJavaのstaticメソッドをRubyでどう表現していいかわからなかったけど、調べた感じだとこんな感じになると思う。Java版 class Sample { public static void func() { System.out.print("test"); } } Ruby版 class Sample def self.func print "test" end…

特異メソッドとクラスメソッド

Rubyの中でも特異メソッドは結構苦戦したので、ちょっとまとめて見る。まずは普通のインスタンスメソッドの記述方法。 これは特に問題ない。 class Hoge def func print "test" end end hoge = Hoge.new hoge.func # => "test" 次は特異メソッド。 これは特…

ブロックの使い方

Rubyを勉強していて一番につまずいたのはこのブロックというやつ。 javaをずっとやっていたせいか、どうもこのブロックという概念が掴みにくい。そこで少し調べて見て、以下の内容にまとめてみた。 とりあえずブロックとは? ブロックは二言で言えば「コード…

for文でのIterator

while文でIteratorを使う場合の欠点としてローカル変数(以下の例の場合「it」)の有効範囲が広がるうえに、「it」という変数名が再利用できないといったことがある。 なのでIteratorを使う場合はwhile文じゃなくてfor文の中で使った方がいいよ、っていうこと…

Commons CLI

Jakarta Commons CLI というものが最近あるのを知ったので、少し調べてみた。いちようコマンドラインオプション解析ライブラリということだけど、つまりはシェルスクリプトとかでjavaを呼んだりするときに、optionやらhelpとかを簡単に実装できるライブラリ…

Log4jとLogBack

文字列の生成に処理コストが掛かってしまうため、Log4jを使ってデバッグログを出力する場合は以下のように書くことが多い。 if(log.isDebugEnabled()){ log.debug("User Name:" + user.getName()); } しかし、正直僕はこの書き方にはとても賛成できない。 実…

IllegalArgumentExceptionとIllegalStateExceptionの違い

メソッドの引数が不正だった場合に IllegalArgumentException をthrowするのはよく使っていたりしていたけど、、、 以下のような感じで。 public void regist(String name) { // 引数チェック if (name == null) { throw new IllegalArgumentException("引数…

hamcrest のMatchersとCoreMatchers

JUnit4.4で使用するMatchersとかの一覧がまとまっているブログがあったのでメモ。Matchers http://d.hatena.ne.jp/Naotsugu/20110307/1299510820 CoreMatchers http://d.hatena.ne.jp/Naotsugu/20101018/1287407710

DbUnitとデータ量

DbUnitを使う機会があったので、そのメモ。 ただテスト対象のテーブルのデータが多いせいで元のデータをファイルに一時退避させる処理にすごい時間が掛かってしまい、全然テストができるレベルじゃなかった。 おそらくDbUnitを使うときはデータの少ないテー…

SimpleDateFormatとマルチスレッド

SimpleDateFormatは基本的には以下の様にクラス変数として宣言するものと思っていた。 毎回newするのも微妙だと思って。 private static final DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); public void func () { } ただ、このように実装してしま…

新聞

ここ2年ぐらいは新聞なんてほとんど読んでない。 たまに休日に図書館に行った際に軽く読むぐらいで、いわゆる社会人的な新聞の読み方は全くしていない。 でもだからといって今まで困ったこともないし、特に損したって思ったこともない。 むしろ新聞読む時間…

diffファイル作成

svn

windowsで簡単にsvnのdiffの作成方法をメモ。 対象のディレクトリまたはファイルをコマンドプロンプトで開いて、以下のコマンドを実行。 svn diff -r リビジョン番号(古):リビジョン番号(新) > ファイル名 例)svn diff -r 6550:6731 > C:\diff.txt

ディレクトリ削除

Javaのファイル操作でディレクトリを削除しようと思ったら、中のサブディレクトリとファイルを削除しないと失敗してしまうので、わざわざ以下の様な長い処理を書かないといけない。 ただ、ディレクトリを削除したいだけなのに。。。※一様ファイルの場合でも…

シンプルなモック

Javaのモックフレームワークだと、EasyMock、JMockit、Mockitoとかいろいろあるけど、 なんとなくJMockitが一番シンプルで使いやすい気がする。 上記の中ではあまり有名じゃないせいか、なんとなく情報が少ない気がする。 メモ程度にサンプルコード。 /** * …

ひらがなの検知

全角ひらがなを文字列から削除する方法を探していたところ、以下の方法があることを知って少し驚いた。"abcあいう123".replaceAll("[\\p{InHiragana}]", ""); 結果:abc123ただ調べた感じだと、\p{InHiragana}は単にひらがなの範囲指定を文字列に置き換えて…

Junitの構造化

JUnitでRunWithアノテーションにEnclosed.classを追加するとテストクラスを構造化できると知って、早速試して見たら、確かにこれは便利だ。 何のテストをしているかをクラスごとに区別できるので、テストケースを後から追加したい時や実施の結果をわかりやす…

Junitのパラメータテスト

Enclosed.classとは別にRunWithアノテーションにTheories.classを追加すると複数パラメータのテストでありがちなコピペを減らすことができるみたい。具体的にはパラメータのパターンで使いたい変数に@DataPointを付与し、テストメソッドに@Theoryを付与すれ…

ローカル変数のfinal

ローカル変数にfinal修飾子をつけるのってすごく違和感があったので、いろいろ調べて見たけど明確な答えがなかなか無かった。 インナークラスからアクセスできるようにするといった内部クラス絡みならわかるけど、個人的にはそれ以外でつける意味ってせいぜ…

Junit4.4

JUnit4.4の新機能について以下のことが言われているらしいので少し。 問題1.そもそも、assertThatとか必要なのか?今まで通りassertEqualsやassertTrueでいいのでは? 問題2.仮にassertThatといった新機能を使って実装した場合、実装した人は良いが、そ…

改修作業

ここ最近これはまずいんじゃないっていうソースコードに出くわすことが多い。(以後BadCode)見ているだけならば、特に害はないし、自分にいいコードと悪いコードを見分けることができてるんだなって、自信にもなるからそれはそれでいい気がする。ただ、そのBa…

バリデーション

バリデート処理の条件として、英数字のみとしたい場合にCharacterクラスのisLetterOrDigitというものがあるらしく、以下のように使うと検知できる。 String text = "ABC123あいう#$%"; for (char c : text.toCharArray()) { // 英数字の場合は出力 if(Charac…

初期化

変数をフィールド上で初期化するか、コンストラクタで初期化するかで迷ったときはコンストラクタので初期化をしたほうがよさそう。 フィールド上で初期化 class Sample { private Hoge hoge = new Hoge(); } コンストラクタで初期化 public class Sample { p…

Boolean

以前こんなif文を見たことがある。 Boolean boo = true; if (boo == Boolean.TRUE) { ...dosomething } if文でのbooleanは以下の用に記述するものだとずっと思っていた僕には少し衝撃的だった。 if (boo) { ...dosomething } そこでふとある疑問にぶつかって…

staticなメソッド

実装しているとたまに、このメソッドはstaticにするべきかしないべきか一瞬迷ってしまうことがある。 そのときの参考のために簡単にまとめ。 staticなメソッドのいくつかの特徴 ・staticなメソッドはインスタンスとは関係ないため、非staticフィールド、非st…

情熱とか

この間ふと、この人きっと仕事ができるんだろうなって思ったことがある。そして同時にその人にあって僕にないもの、僕に足りないものは何だろうって考えたとき、答えはすぐに出た。。。訳もなく、今このエントリを書きながら考えてみることにした。うーん。…

テレビとネットと

一般的にテレビを長時間見ること、またはテレビを見ること自体がよくないという風潮があるけど、僕自身もどちらかというとテレビはあまり見ないほうだからこういった意見には割りと賛成できる。ただ、息抜きだったり、テレビでしか得られない情報ももちろん…

電子書籍と

電子書籍より今まで販売されていた本とか雑誌のが好き! っていう人は意外と多い気がする。 少なくとも僕はどちらかというと、今までの書籍の形式の方が好きだ。 新しく買った本や雑誌の匂いは格別だし、古本屋で買った日焼けした本の雰囲気はなんとも文学的…