SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新開発言語「Scala」の実体

Javaの限界を超えて実用化を目指す
新開発言語「Scala」のメリットとは~補足編

キーワードは手軽さと拡張性


暗黙の型変換(implicit conversion)

 case classと組み合わせて使うと効果的な機能の1つに、「暗黙の型変換」(implicit conversion)というものがあります。

 例として、時間、日、年を「分」に変換するMinuteClsというcase classを取り上げてみましょう。

scala> case class MinuteCls(val num : Int) {
     | def hours = num * 60
     | def days = num * 60 * 24
     | def years = num * 60 * 24 * 365
     | def say = "この値は、 おおよそ"+ num +"分となります"
     | }
defined class MinuteCls

 MinuteClsのオブジェクトを生成し、メソッドを実行してみましょう。

scala> val m = MinuteCls(4)
m: MinuteCls = MinuteCls(4)

scala> m.hours
res68: Int = 240

scala> m.days
res69: Int = 5760

 確かに、4時間は240分であり、4日間は5760分なので、この挙動は正しいです。しかし、このクラス定義自体がよくない(分かりにくい)のではと、思う人も多いでしょう。実は、このクラスは暗黙の型変換を介して用いることで、初めて分かりやすく使えるようになるものなのです。

Scalaでは、implicitキーワードをつけた関数定義によって暗黙の型変換が行えます。

scala> implicit def int2Minute( num:Int) = MinuteCls(num)
int2Minute: (Int)MinuteCls

 これにより、整数があたかも、hoursdaysといったメソッドを持つように振舞うようになります。

scala> 2.hours
res70: Int = 120

 メソッドをチェーンさせることもできます。

scala> 3.days.say
res71: java.lang.String = この値は、 おおよそ4320分となります

scala> 10.years.say
res133: java.lang.String = この値は、 おおよそ5256000分となります

 暗黙の型変換とは、自身に対応する型を持たない場合の振る舞いを拡張する手法です。ここでは、整数(Int)である2,3,10という数値が、MinuteCls内に定義されているhoursdaysyearssayというメソッドを自身を引数として呼び出しています。

 この例は、あまりぱっとしないものでしたが、Scalaでは、Javaのメソッドを便利に拡張するための基本的なテクニックとして暗黙の型変換が数多く用いられています。これは、特にドメイン固有言語(DSL)を作る際に便利なテクニックです。

次のページ
まとめ

この記事は参考になりましたか?

新開発言語「Scala」の実体連載記事一覧

もっと読む

この記事の著者

株式会社パテントビューロ 三木隆史(ミキ タカフミ)

株式会社パテントビューロ所属。マネージャー業務と平行して、Webアプリケーション開発、自然言語系の研究開発を行なう。以前はC言語による組込開発。違和感なくScalaへ移行できたことや、ロジック部分に注力できる生産性の高さに驚いている。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

株式会社パテントビューロ 木村吉博(キムラ ヨシヒロ)

政府系研究機関での研究開発を経て、現在、株式会社パテントビューロにて、プログラミング(知財関連文書(SGML/XML)の変換バッチ処理のScalaでの記述など)を担当している。複雑でイレギュラーな記述も多々見られる大量の文書を相手にする際に、Scalaの書きやすさと高速性とに大いに助けられている。か...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4543 2011/03/28 09:55

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー