Your browser doesn't support the features required by impress.js, so you are presented with a simplified version of this presentation.

For the best experience please use the latest Chrome or Safari browser. Firefox 10 (to be released soon) will also handle it.

Java For
Perl Mongers

Yappo@YAPC::Asia 2014

この発表は個人の見識であり、所属する組織やこの勉強会の公式見解とは一切違います

自己紹介

みなさん YAPC の折り返しにきてるけど楽しんでますかー?

1,2,3

YAPC 大好き!! (c) daisuke maki

僕の本日の予定

なんでこういうトークをしようとしたか

についてはなす。 今はスマホの時代だから perl だけ知ってればいいと思ってるエンジニアとか役に立たない。 perl, javascript, objective-c, java, swift... 小さいスタートアップだったら server side は one languagen でいいけど 今の時代あっというまにサービスの規模がでかくなる -> server side の言語の種類がなぜか増える -> api 通信とかで他言語のシステムと連携する必要がある -> 問題があった時に相手のコードとか見て問題の対処が出来るようなエンジニアじゃ無いとこの先つらい -> perl しか出来ないと未来が無い

プログラム言語どころか、今のサービスは突然世界規模になったりする、結果的に世界中にエンジニアと仕事する必要がある、まぁ perl とかやったこと無い国の人がおおくて、 php とか java とか -> 相手が理解出来るコードを見せる必要がある

結局このへんってエンジニアとしてのコミュニケーション力が求められてるとおもうんですよね。 使ってる言語のボーダーを越えたり国のボーダーを簡単に飛び越えられる能力が求められてきている。

そういう話を yapc でして見たかったんだけど、いいテーマがあんまり思い浮かばなくて端的に解りやすいボーダーとして今回 java を選んだんだけど、結果的に炎上してたり世の中むづかしいですね。

みたいな意識高い話でもしようとしたけど、午前中にインフラの人達が宇宙レベルの意識高い話をしててお腹いっぱいになったので、全部書き換えましたごめんんささい

という事で本題に進もうとおもうのですが

本日の概要

*注意事項 スピーカーの事情によりもっと面白いネタが思いついた場合や習得状況により、内容が変更になる可能性があります

 

ちゃんと Java を覚えようとしたんだけど

なんか Java って普通すぎて。。。

皆さんに質問です

このコードは何で書かれてますか?

Perl だと思う人?

Java だと思う人?

なるほど

正解は...

Java

そして

Perl

ね? Perl の人達が Java 学ぼうとしても、既に新しく覚える事無くて進捗ダメなんですよ。。。

このまま次に進むのもアレなので Perl の不思議な部分の解説を。。。

'booleanValue = true;' について

lvalue attribute

なので

booleanValue = $x; とかすると $booleanValue に $x が代入される

'System.out.println(msg);' について

'System.out.println(msg);' を Perl はどう解釈しているか

Perl がコードをどのようにして解釈しているかを知る事が出来る B::Deparse というモジュールがあります。(検索キーワード: dankogai B::Deparse)

perl -MO=Deparse -e 'sub System { "1" }; sub out { "2" }; sub println { print "$_[0]\n"; "3" }; System.out.println("x")' 

このようにして Perl を実行すると System.out.println('x') に関わるコードを Perl はどう解釈しているか解るのです。

ただの文字列連結された文字列として評価されてた

'123' という文字列を作っただけでした。

true/false/throw/new は普通の Perl ですよね?

このように、基本的にはどのようなプログラム言語も大差はない

僕が Java Java 言い出したきっかけ

!!! 突然の Java !!!

という事で Java やろうとしていて、実際見聞きしてきたりした事を軽く share してみます

Java の嫌な所

JVM が重い

JVM が重い


きっと、なんとかしてくれる。。。(希望)

重量級のライブラリを沢山使わないといけない

エンタープライズ文化だからしょうがない。嫌なら作ったらいい。

コードが冗長だ

冗長だからこそ、コンパイル出来たら動くコードだと言うのが保証出来るんだし一長一短かと。 あと IDE 便利ですよ

ファイルが増えまくる

1 file/1 class しか書けないの、僕の今の技能レベルだと不満なんですが IDE 便利ですよ

emacs で Java 書きたいんだけど

Eclipse で emcas 互換キーバインドあるし IDE 便利ですよ

IDE が重い

仕事で使ってるなら最新の MBA とか買うと快適ですよ^^

cpanm とか carton がない

Google + jar download + IDE の jar import でやったりクラスパス通ってるところにおいといたらいいらしい

maven central reposytory がクソだ

って gfx が言ってた気がするけど、おれまだそこまで出来てない。 github に個別に立ててる人とかもいるみたいだね。

情報をググっても DoJa に毛が生えたようなサンプルコードしか出てこない

Perl Monger にそれ言う資格があるとでも?

Java の良い所

書ける人が多い

type safe

Perl でも頑張ったら静的にチェックできるよ

正直こんなの誰も使わないw

Java に話をもどして。。

やっぱり ORM とかで効果たかい

JSON とかも安全に扱える

うっかり型が間違ってたら例外も飛ぶ

perl って json たいへんですよね

int/str boolean

でも perl だと一発で JSON 作れてべんりーだったり

my $json = JSON::XS->new->ascii->encode(+{
    id    => 1,
    name  => 'Yappo',
    yappo => 'JSON::XS::true,
});

Java でもやれるんだろうけど type safe の恩恵無くなって Java で書く意味皆無だけど。。。

HASH/ARRAY みたいな物を簡単に構築して利用出来るのが LL の利点ですよねー(型推論の話はおいとく)

Java にはとつぜんのぬるぽあったりするじゃん?

でも perl でも

my $row = $tng->single( table => { id => $id } );
say $row->name;

みたいなコードで $row あるかどうかチェックしないで死ぬコードとかうっかり書く人多くて、そこ言語の差ないよね。

Java の利点っていっても、ぶっちゃけ普通の言語だからあんまり思いつかなかったのでした

自分の置かれている状況や環境によって道具を選ぶのがプロなので、僕はたまたま Java Java 言ってるだけですね

そういえば Java8 の話するとか言ってました

Stream API & lambda

以下のように表示される
filter: dan
map: dan
filter: the
map: the
filter: kogai
map: kogai

Stream API

callback が必要なコードは lambda を使えばすっきり

IDE には lambda から Anon Class に置き換える変換機能もついてて

一発で古き Java Style になる

逆に lambda にも一発でおk

最近はぞんがい waf とかも薄いのある

とある amon2 っての作った人が偶然いま作ってる java の waf が Perl Monger にはわかりやすい気がする。 まだ使った事無いけど。

router

controller

controller

アノテーションとか使ってないってさ

perl の attribute みたいなもの。 perl のは attribute つかったコードをデバッグするのとかコード追いかけるの大変だけど java のアノテーションも似てるので、おっかけるの大変らしいね。

それでも我々は Perl を使っていた

ここ最後のスライドなので、時間見ながら喋る

以上です

何か質問は?

Use a spacebar or arrow keys to navigate