More Related Content
Similar to 生粋のRubyistがJavaを好きになった理由 (20)
生粋のRubyistがJavaを好きになった理由
- 3. 経験したプログラミング言語とエディタ
プログラミング言語 エディタ、開発環境
1982 BASIC BASIC
1986 Z80アセンブリ言語 ZEDA (Z80開発環境)
1990 C MicroEmacs
1990 dBASE VZ Editor
1993 Perl Nemacs, Mule
1999 C++ Mule
2005 Ruby Emacs
2009 JavaScript Emacs
2014 Java Eclipse
少しだけ: Python, PHP, R, Emacs Lisp, Bourne Shell, AWK
3
- 4. Rubyの好きなところ
4
1. 短く書ける
● 動的型付き言語なので型の記述が不要
● 便利なメソッドがたくさん用意されている
user_names = [
{ name: "Akira", age: 24 },
{ name: "Bob", age: 30 },
{ name: "Chris", age: 28 },
]
IO.foreach("hoge.txt") do |line|
...
end
last_users = users.last(2)
- 9. 2. コードが長い、冗長
ユーザベース入社前のJavaの印象
言語 標準出力への書き込み main関数/メソッド
Ruby puts "Hello" 無し。または
if $0 == __FILE__ ... end
C puts("Hellon"); void main(int argc, char
**argv) { ... }
Java System.out.println
("Hellon");
public static void main
(String args[]) { ... }
9
[その他] getter, setter, 大量のimport...
- 16. ● コードが長い
Eclipseテンプレート機能を使うと簡単に入力できる
sysout → [Ctrl+Space] → System.out.println();
● クラスやファイルの数が多い、ディレクトリ階層が深い
Eclipseでクラス名を指定して簡単にファイルを開ける、メニューから簡
単にクラスを作成できる
● getter, setterを書くのが面倒
Lombokを使えば楽 (@Getter, @Setter, @Value, @Dataなど)
● 大量のimport
Eclipseが自動的に挿入してくれる
周辺ツールでカバーできる問題点が多い
16
- 18. ● クラス名、メソッド名、変数名などの補完、リネーム
● メソッドの抽出、シグネチャの変更(引数の順番など)
● ローカル変数への割り当て、抽出、インライン化
Eclipseの入力機能、リファクタリング機能
18
Arrays.asList("Taro", "Akira");
↓⌘2 L
List<String> asList = Arrays.asList( "Taro", "Akira");
↓⌘1 [Extract to local variable]
String string = "Taro";
List<String> asList = Arrays.asList( string, "Akira");
- 21. 3. 文字列処理が面倒(ex. 正規表現)
やっぱり気になること
21
Ruby Java
マッチするか? s =~ /<.*?>/ s.matches(".*<.*?>.*");
最初にマッチした
箇所の取得
s[/<.*?>/] Pattern p = Pattern.compile("<.*?
>");
Matcher m = p.matcher(s);
if (m.find()) {
String tag = m.group();
}
マッチする箇所を
全部取得
s.scan(/<.*?
>/)
上記のコードで while(m.find()) を使う
- 22. 3. クラス名が衝突すると面倒
やっぱり気になること
22
/** 検索APIの開発 */
// Elasticsearch で検索
org.elasticsearch.action.search.SearchResponse esRes = execute(req);
org.elasticsearch.search.SearchHits esHits = esRes.getHits();
...
// 検索結果を返す
SearchHits hits = convertSearchHits(esHits);
SearchResponse res = new SearchResponse(esHits, ...);