В данной статье мы рассмотрим Options в языке Scala. Опция – это коллекция элементов заданного типа.
Для создания Option используется запись следующего вида:
def findDeveloper(key: String): Option[Developer];
Данный метод вернёт Some[Developer] если запись будет найдена в указанной коллекции, либо None – если нет.
Для понимания того, как это работает на практике рассмотрим простой пример:
package net.proselyte.scalatutorial.collections
/**
* Simple Scala class that demonstrates Options in Scala.
*
* @author Eugene Suleimanov
*/
object OptionDemo {
def main(args: Array[String]) {
val developers = Map("Eugene Suleimanov" -> "Java/Scala Developer", "Ivan Ivanov" -> "C++ Developer");
println("developers: " + developers);
println("developers.get(\"Eugene Suleimanov\"): " + developers.get("Eugene Suleimanov"));
println("developers.get(\"Ivan Ivanov\"): " + developers.get("Eugene Suleimanov"));
println("developers.get(\"Kolya Nikolaev\"): " + developers.get("Kolya Nikolaev"));
println();
println("Using method showDevelopers...");
println("showDevelopers(developers.get(\"Eugene Suleimanov\")): " + showDevelopers(developers.get("Eugene Suleimanov")));
println("showDevelopers(developers.get(\"Ivan Ivanov\")): " + showDevelopers(developers.get("Ivan Ivanov")));
println("showDevelopers(developers.get(\"Kolya Nikolaev\")): " + showDevelopers(developers.get("Kolya Nikolaev")));
}
def showDevelopers(x: Option[String]) = x match {
case Some(some)=> some;
case None => "Developer with this name not found";
}
}
В результате выполнения данной программы вывод в консоль будет следующим:
developers: Map(Eugene Suleimanov -> Java/Scala Developer, Ivan Ivanov -> C++ Developer)
developers.get("Eugene Suleimanov"): Some(Java/Scala Developer)
developers.get("Ivan Ivanov"): Some(Java/Scala Developer)
developers.get("Kolya Nikolaev"): None
Using method showDevelopers...
showDevelopers(developers.get("Eugene Suleimanov")): Java/Scala Developer
showDevelopers(developers.get("Ivan Ivanov")): C++ Developer
showDevelopers(developers.get("Kolya Nikolaev")): Developer with this name not found
Process finished with exit code 0
На этом мы заканчиваем изучение Option в Scala.