Optional Type in Java 8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
package edu.oswego.cs.csc344; import java.util.HashMap; import java.util.Optional; public class OptionalTypes { static OptionalHashMap<String, String> classFleetMap = new OptionalHashMap<String, String>(); private static void populateMap(){ classFleetMap.put("Constitution", "Starfleet"); classFleetMap.put("Cube", "Borg"); classFleetMap.put("Bird of Prey", "Klingon"); } private static void printFleet(String c){ System.out.println(c + " : " + classFleetMap.getOptionally(c).orElse("Unknown")); } public static void main(String[] args){ populateMap(); printFleet("Constitution"); printFleet("Warbird"); } } class OptionalHashMap<T, S> extends HashMap<T, S>{ Optional<S> getOptionally(T key){ return Optional.ofNullable(get(key)); } }</s> |
Option Type in Scala
1 2 3 4 5 6 7 8 |
import scala.math.log object safemath { def safelog(d:Double):Option[Double] = { if ( d <= 0 ) None else Some(log(d)) } } |
Maybe Type in Haskell
1 2 3 4 5 6 7 8 9 10 11 |
import Data.Maybe main :: IO () main = do print (safelog 1000) print (safelog (-1000)) safelog :: (Floating a, Ord a) => a -> Maybe a safelog x | x > 0 = Just (log x) | otherwise = Nothing |