私はScalaを初めて使い慣れました。私が他の人が書いたScalaコードを読んで勉強しているとき、Scalaのコードで他の言語と違う点はパターンマッチングです。Scalaでのパターンマッチングの速さ
同時に私はそれがもたらす利便性と表現力を感じます。その背後にある潜在的なパフォーマンスコストが不思議であるのを助けることはできません - 一般的に言えば、どのくらい速いですかmatch
?
まず、コンストラクタの一致するパラメータなどの「高度な」機能がない場合、IMOのScalaのmatch
は、switch-case
の対応言語です。例えば、初心者として
color match {
0 => println "color is red!"
1 => println "color is green!"
2 => println "color is blue!"
}
は、私は上記のコードはif-else
文で同等のコードとまったく同じ速さであるかどうかを知りたいですか?今それらを取って第二
、「高度な」例えば、バック機能:
は試合の他の機能(リストマッチング、ペアマッチングなど)または上記のコードについてはexpr match {
Animal(name) => ...
Animal(name, age) => ...
Animal(_, _, id) => ...
}
、私は好奇心ですScalaがこのような使い方をどのように実装したか?そして、最も重要なことは、これらのコードがどれくらい速くなると思いますか? (言って、最初のケースではまだmatch
と同じくらい速いですか、少し遅くなったり、反射などの技術を使用して非常に遅いですか?)
ありがとうございます!
は、文脈に依存します:
isInstanceOf
(無反射または類似のもの)を介して手動チェックなどのパフォーマンスを(コンパイラが何かを最適化することができた場合、またはより良い)しかし、それは同じ持っている定数を含む限られた場合には、それは次のようになりますjavaスイッチ。組み込みのcaseクラスパターンでパターンマッチングが必要な場合は、単にinstanceofのチェックを行い、次にフィールドのメンバー検索を行います。一般的な場合、完全な 'unapply'メソッドが呼び出されます(そして、それはより遅いです)。 – Alec