Настав 2020 рік, компілятор Scala генерує набагато ефективніший байт-код у випадку зіставлення зразків. Коментарі до результатів у прийнятій відповіді вводять в оману в 2020 році.
Згенерований байт-код збігу шаблону дає жорстку конкуренцію, якщо-небудь інколи вигравання відповідності зразків дає набагато кращі та стабільніші результати.
Можна скористатися збігом зразків або if-else на основі ситуації та простоти. Але відповідність шаблону має низьку продуктивність, висновок більше не діє.
Ви можете спробувати такий фрагмент і побачити результати:
def testMatch(password: String, enteredPassword: String) = {
val entering = System.nanoTime()
password == enteredPassword match {
case true => {
println(s"User is authenticated. Time taken to evaluate True in match : ${System.nanoTime() - entering}"
)
}
case false => {
println(s"Entered password is invalid. Time taken to evaluate false in match : ${System.nanoTime() - entering}"
)
}
}
}
testMatch("abc", "abc")
testMatch("abc", "def")
Pattern Match Results :
User is authenticated. Time taken to evaluate True in match : 1798
Entered password is invalid. Time taken to evaluate false in match : 3878
If else :
def testIf(password: String, enteredPassword: String) = {
val entering = System.nanoTime()
if (password == enteredPassword) {
println(
s"User is authenticated. Time taken to evaluate if : ${System.nanoTime() - entering}"
)
} else {
println(
s"Entered password is invalid.Time taken to evaluate else ${System.nanoTime() - entering}"
)
}
}
testIf("abc", "abc")
testIf("abc", "def")
If-else time results:
User is authenticated. Time taken to evaluate if : 65062652
Entered password is invalid.Time taken to evaluate else : 1809
PS: Оскільки цифри мають нано-точність, результати можуть не точно збігатися з точними цифрами, але аргументи щодо продуктивності є хорошими.