2011年1月25日火曜日

【intellij】live templates

Intellijには、live templatesなるものがあって、コーディング作業をサポートしてくれるテンプレートが用意されている。

デフォルトでは、こんな感じのものが用意されている。














この機能を使って、Javaのコマンドライン引数を標準出力に出力するコードを書いてみる。 ほとんどコードを書くって作業をする必要がない。

空のクラスにmain関数を作成

main関数は、「psvm」というtemplateを使用する。 templateの一覧は、Windowsのデフォルトkeymapでは、「Ctrl+j」で表示される。











「psvm」を選択するとこんな感じにmain関数が出力される。











コマンドライン引数のループ

配列のループは、「iter」というtemplateを使用する。このtemplateは、JDK5以降のfor-each文が出力される。 「itar」を使用すると、従来のfor文が出力できる。














「iter」を選択した結果。変数名を変えたい場合は、template選択後に変更可能な変数にフォーカスが当たるのでそこで変更することができるようになっている。 (いちいち、名前を変えたい変数まで移動する必要がないようになっている。)














標準出力へ出力

標準出力へ変数の出力は、「soutv」というtemplateを使用する。












こんな感じに、「変数名 = 値」を出力するsysoutが出力される。














こんな感じに、live templatesを使用すると決まりきったコードをtemplateを使ってコーディングできるためかなり作業効率が上がる。 また、templateは自由に追加できるため、これ毎回書いてるな?と思うのがあったら追加していくといい感じになるとおもう。

2011年1月23日日曜日

【ruby】エンコード指定でファイル入出力

ファイルを入出力する際には、アプリの内部エンコーディングとは異なるエンコーディングのファイルを開きたい場合がある。
そんな時には、Fileを開く際に外部エンコーディングを指定してあげれば良い。

実行時に文字列のエンコーディングを変更する方法→http://se-bikou.blogspot.com/2010/02/ruby19.html

ファイル出力


windows-31jのフィルを出力する場合

#coding:utf-8
# windows-31jを指定してファイルを開く
File.open("test.txt", "w:windows-31j") { |file|
  file.puts "1,あいうえお"
  file.puts "2,あいうえお"
}

euc-jpを指定する場合

#coding:utf-8
# euc-jpを指定してファイルを開く 
File.open("test.txt", "w:euc-jp") { |file| 
  file.puts "1,あいうえお" 
  file.puts "2,あいうえお" 
}

ファイル入力


euc-jpのファイルを出力

# euc-jpのファイルを読み込む場合
# 入力ファイルのエンコーディングには、euc-jpを指定する。 
File.open("test.txt", "r:euc-jp") {|file| 
  file.each {|line| 
    puts "#{line}:#{line.encoding}" 
  } 
}

2011年1月10日月曜日

【ruby】オブジェクトのクラスをテスト

Rubyでインスタンスがどのクラスか?(どのクラスのサブクラス)かをチェクする方法。

変数が、どのクラスかをチェックする方法
instance_of?メソッドを使うことによってチェックできる。
array = Array.new

# array変数の実体クラスのArrayを指定した場合はtrue
puts array.class == Array          # => true
    
# 親クラスのObjectを指定さ場合は、false
puts array.instance_of? Object     # => false
    
# ミックスインモジュールのEnumerableを指定した場合はfalse
puts array.instance_of? Enumerable # => false

is_a?メソッドを使うと階層構造を含めてチェックできる。
puts array.is_a? Array        # => true
puts array.is_a? Object       # => true(親クラスをチェックできる)
puts array.is_a? Enumerable   # => true(ミックスインもチェックできる)

# Classクラスの===でも同じ比較が行える。直感的なのはis_a?かな。
puts Object === array