Scalaで強引に日本語プログラミングしてみた
ちょっとした小ネタです。
Scalaは変数名などに日本語を使用することができるんですが、どこまで日本語でいけるかをちょっと試してみました。
はっきり言って誰得?って感じですがまぁそれはおいといて。。。
やったこと
LDRの公開OPMLをダウンロードして、ドメイン毎の購読数を集計するプログラムを、強引に日本語で書いてみました。
ちなみに、このプログラムで集計した結果、自分がLDRで購読しているFeedの43.78%がはてなでした。非モテ度が高いですね!!
クラス名、メソッド名、変数名は全部日本語
可能な限り、クラス名、メソッド名、変数名には日本語を使用しました。
組み込みの型に日本語でエイリアスをつける
scalaでは、importする際のクラス名に別名をつけることができます。この別名を日本語にしてみました。
こんな感じです。
import java.lang.{String ⇒ 文字列}
⇒,→,←を積極的に活用する
日本語と関係ないんですが、scalaでは、"⇒(Unicode \u21D2)"と"←(Unicode \u2190)"は予約語です(!?)
Programming Scala - OFPS - O'Reilly Media
"⇒(Unicode \u21D2)"は関数リテラルで引数型と返却型のセパレータである"=>"と同じ扱いですし、"←(Unicode \u2190)"はfor式でのGeneratorである"<-"と同じです。
ですので、こんなコードはコンパイル通ります。
val どんな空気よ_? = (なぜか変換できない : List[String]) ⇒ for( ふいんき ← なぜか変換できない ) { println( ふいんき ) } どんな空気よ_?(List( "よい" ,"悪い"))
また、"→(Unicode \u2192)"は、scala.predef.ArrowAssocの別名です。scalaでは、"key" -> "value"でTuple2("key","value")を生成できるのですが、"key" → "value"でも同様にTupleができます。
なので、Mapの初期値を設定するときには、こんな風に書けます。
val m = Map( "日本語で書いても読みにくくね?" → "それをいっちゃあおしまいよ" , "誰得?" → "おまえが言うな" )
実際どうなるの?
で、まぁBefore→Afterでこんな感じです。
かえって読みにくくね?って質問は却下です。