Help us understand the problem. What is going on with this article?

Scalaのimplicit(暗黙)に関する理解のためのメモ

More than 1 year has passed since last update.

概要

Scalaではimplicit(暗黙)という機能があり、おそらくScala未経験の人はこの機能が使われているソースを見て、かなり戸惑うと思います。(私も戸惑いました)
implicitの動作については@miyatin0212さんのScala implicit修飾子 まとめにて、詳しくまとめられていますが、自分なりに理解した内容とサンプルコードをメモとして残しておきます。

理解&サンプルコード

1_暗黙の引数

implicitの変数を引数に設定することで、メソッド呼び出し時に引数の設定を省略することが出来ます。サンプルコードは以下です、実行結果は「11」になります。

  // 1_暗黙の引数メソッド
  def returnInt(implicit param:Int):Int = {
     param + 5
  }
  implicit val param = 6
  println(returnInt)

2_暗黙のメソッド

引数に暗黙的にメソッドを呼び出したいクラスを設定することで、通常コンパイルエラー等発生する場合でも自動的にメソッドを補完する機能です。サンプルコードは以下です、実行結果は「7」になります。

  // テスト用の空クラス
  case class TestEmptyClass(){}

  // 2_暗黙のメソッド
  implicit def returnInt(param:TestEmptyClass):Int = {
    3
  }

  // 空クラスの作成
  val test = TestEmptyClass()
  println(4 + test)

3_暗黙のクラス

引数にメソッド等を拡張したいクラスを設定することで、自動的にクラスを補完してくれる機能です。サンプルコードは以下です、実行結果は「testclass」になります。

  // テスト用の空クラス
  case class TestEmptyClass(){}

  // 3_暗黙のクラス
  implicit class ImpClass(param:TestEmptyClass){
    def plintTest= {
      println("testclass")
    }
  }

  // 空クラスの作成
  val test = TestEmptyClass()
  test.plintTest
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away