Ich gehe durch die Funktionale Programmierung in Scala (Autor: Paul Chiusano und Runar Bjarnarson), finden Sie unten Erklärung für die Verwendung nicht unter Gesamtfunktion für die Ausnahmebehandlung. Es sagt, wenn wir eine größere Berechnung machen, sollten wir nicht verwenden, was genau damit gemeint ist. Wollen Sie bitte erklären, ein einfaches Beispiel zu geben. Vielen Dank !!Ausnahmebehandlung in Scala Funktionsprogrammierung
Antwort
Verwenden Arten von Fehlerfällen zu kommunizieren, anstatt Werte
ein Programm Lets genannt Foo
wird die Funktion mean
verwenden. Leider lässt sich ein leeres IndexedSeq
als Argument an die mean
Funktion senden. In diesem Fall mean
Funktion würde onEmpty
zurückgeben, die ein Double ist.
Da mean
ein Double zurückgibt, wenn IndexedSeq
leer ist, kann das aufrufende Programm (Foo-Programm) nicht zwischen dem Normalfall (wo die Liste nicht leer ist) und dem undefinierten Fall (Liste ist leer) unterscheiden.
Das Problem mit der Funktion
mean
esDouble
in beide undefiniert Fall und Normalfall zurückgibt, wenn die Liste leer ist, nicht.
val someList = List.empty[Double]
val meanValue = mean(someList, -1)
if (meanValue == - 1) //undefined case else meanValue
Die obige Weise mean
den undefinierten Wert der Funktion der Überprüfung wird nicht empfohlen.
Der Autor möchte den undefinierten Status mithilfe eines Typs kommunizieren.
Hier ist, wie wir tun können, dass
def mean(list: List[Double]): Option[Double] = {
if (list.isEmpty) None
else Some(list.sum/list.length)
}
Die obige mean
Funktion None zurück, wenn undefinierte Fall aufgetreten ist (Liste ist leer) und verlässt sich nicht auf die unsichere Kommunikation einen Wert zurückzugeben.
Foo
Programm könnte die Berechnung stoppen, wenn ein nicht definierter Rückkehr ist die Funktion oder mean
Foo
Programm könnte einen anderen Zweig nehmen, wenn Begegnung durch den undefinierten Wert (Wert, der durch die mean
Funktion zurückgegeben, wenn die Liste leer ist). Aber Foo
Programm muss auf onEmpty
Wert antworten, um für den undefinierten Fall zu überprüfen.
Stellen Sie sich vor, Ihr Programm kann eine Liste empfangen List(-2.0, 0.0)
.
val list = List(-2.0, 0.0)
val theMean = mean(list, -1.0)
// now I want to handle the error case
if (theMean == -1.0)
println("mean can't be computed!") // wrong!
Wenn mean
würde einigen dummen Standardwert nicht nehmen, aber zurückkehren würde ein Option[Double]
oder ein Either[String,Double]
oder ... es nicht mehr möglich ist, solch einen Fehler zu machen.
Ja! jetzt bin ich klar. pamu hat eine Aussage gegeben, die eindeutig zu deinem Beispiel passt, d. h. "Typen verwenden, um Fehlerfälle anstatt Werte zu kommunizieren". –
- 1. Was ist zip (Funktionsprogrammierung?)
- 2. scala io Ausnahmebehandlung
- 3. Akka Scala Kamel. Ausnahmebehandlung
- 4. Ausnahmebehandlung mit Scala-Futures
- 5. Maschinenmodell für Funktionsprogrammierung
- 6. Globale Ausnahmebehandlung in C++
- 7. Ausnahmebehandlung in C#
- 8. Ausnahmebehandlung in Decorator-Funktion
- 9. Ausnahmebehandlung in Ajax-Aufrufen
- 10. Effiziente Ausnahmebehandlung in Java
- 11. Asynchrone Ausnahmebehandlung in Python
- 12. Ausnahmebehandlung in Fassadenservice
- 13. Ausnahmebehandlung in R
- 14. Ausnahmebehandlung in Obj-C
- 15. Ausnahmebehandlung in Lambda-Ausdruck
- 16. Abfrage in Ausnahmebehandlung
- 17. Flusskontrolle in der Ausnahmebehandlung
- 18. Ausnahmebehandlung in Threads
- 19. Async-Ausnahmebehandlung in F #
- 20. Globale Ausnahmebehandlung in Jersey
- 21. Ausnahmebehandlung in gRPC
- 22. OverLimit Ausnahmebehandlung in Java
- 23. UpdatePanel Ausnahmebehandlung
- 24. Python-Ausnahmebehandlung
- 25. DB2-Ausnahmebehandlung
- 26. Java-Ausnahmebehandlung
- 27. ofstream Ausnahmebehandlung
- 28. Hintergrund-Ausnahmebehandlung
- 29. Ausnahmebehandlung einzeln
- 30. WCF-Ausnahmebehandlung
Ja, ich verstehe eine generische Art der Programmierung (d. H. Verwendung von Option), indem Sie nicht auf Programmierer-Eingabe (wie -1, einige kann -5 geben). Aber dieser Weg kann auch mit den Dingen umgehen. Versuchen Sie zu sagen, wir sollten eine allgemeinere Art der Programmierung verwenden, um Fehler zu vermeiden. –
@PriyaranjanSwain verwendet Typen, um Fehlerfälle anstelle von Werten zu kommunizieren – pamu
Sollen 'else list.sum/list.length' nicht' else Some (list.sum/list.length) 'sein? –