読者です 読者をやめる 読者になる 読者になる

( ꒪⌓꒪) ゆるよろ日記

( ゚∀゚)o彡°オパーイ!オパーイ! ( ;゚皿゚)ノシΣ フィンギィィーーッ!!!

Scalaで強引に日本語プログラミングしてみた

ちょっとした小ネタです。


Scalaは変数名などに日本語を使用することができるんですが、どこまで日本語でいけるかをちょっと試してみました。


はっきり言って誰得?って感じですがまぁそれはおいといて。。。

やったこと

LDRの公開OPMLをダウンロードして、ドメイン毎の購読数を集計するプログラムを、強引に日本語で書いてみました。


ちなみに、このプログラムで集計した結果、自分がLDRで購読しているFeedの43.78%がはてなでした。非モテ度が高いですね!!

クラス名、メソッド名、変数名は全部日本語

可能な限り、クラス名、メソッド名、変数名には日本語を使用しました。

組み込みの型に日本語でエイリアスをつける

scalaでは、importする際のクラス名に別名をつけることができます。この別名を日本語にしてみました。
こんな感じです。

import java.lang.{String ⇒ 文字列}

変数名などはjavaでも日本語にできますが、既存の型に別名をつけるのはscalaならではでしょう。

⇒,→,←を積極的に活用する

日本語と関係ないんですが、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でこんな感じです。
かえって読みにくくね?って質問は却下です。

Before

After