|     28 // |     28 // | 
|     29 // Option[Int]: None, Some(0), Some(1), ... |     29 // Option[Int]: None, Some(0), Some(1), ... | 
|     30 // Option[Boolean]: None, Some(true), Some(false) |     30 // Option[Boolean]: None, Some(true), Some(false) | 
|     31 // Option[...]: None, Some(_) |     31 // Option[...]: None, Some(_) | 
|     32  |     32  | 
|         |     33 def div(x: Int, y: Int) : Int =  | 
|         |     34   x / y | 
|         |     35  | 
|     33 def safe_div(x: Int, y: Int) : Option[Int] =  |     36 def safe_div(x: Int, y: Int) : Option[Int] =  | 
|     34   if (y == 0) None else Some(x / y) |     37   if (y == 0) None else Some(x / y) | 
|     35  |     38  | 
|     36 safe_div(10 + 5, 0)   |     39 def foo_calculation(x: Int) =  | 
|         |     40   if (safe_div(x, x) == None) 24 else safe_div(x, x).get | 
|         |     41  | 
|         |     42 foo_calculation(3) | 
|         |     43 foo_calculation(0) | 
|         |     44  | 
|         |     45 safe_div(10 + 5, 3)   | 
|     37  |     46  | 
|     38 List(1,2,3,4,5,6).indexOf(7) |     47 List(1,2,3,4,5,6).indexOf(7) | 
|     39 List[Int]().min |     48 List[Int](3,4,5).min | 
|     40 List[Int](3,4,5).minOption |     49 List[Int]().minOption | 
|     41  |     50  | 
|     42  |     51  | 
|     43  |     52  | 
|     44 // better error handling with Options (no exceptions) |     53 // better error handling with Options (no exceptions) | 
|     45 // |     54 // | 
|     47 // |     56 // | 
|     48  |     57  | 
|     49 import scala.util._      // Try,... |     58 import scala.util._      // Try,... | 
|     50 import io.Source         // fromURL |     59 import io.Source         // fromURL | 
|     51  |     60  | 
|     52 val my_url = "https://nms.kcl.ac.uk/christian.urban2/" |     61 val my_url = "https://nms.kcl.ac.uk/christian.urban/" | 
|     53  |     62  | 
|     54 Source.fromURL(my_url)("ISO-8859-1").mkString |     63 Source.fromURL(my_url)("ISO-8859-1").mkString | 
|     55 Source.fromURL(my_url)("ISO-8859-1").getLines().toList |     64 Source.fromURL(my_url)("ISO-8859-1").getLines().toList | 
|     56  |     65  | 
|     57 Try(Source.fromURL(my_url)("ISO-8859-1").mkString).getOrElse("") |     66 Try(Source.fromURL(my_url)("ISO-8859-1").mkString).getOrElse("") | 
|    189  |    206  | 
|    190 lst.filter(x => x % 2 == 0) |    207 lst.filter(x => x % 2 == 0) | 
|    191 lst.filter(_ % 2 == 0) |    208 lst.filter(_ % 2 == 0) | 
|    192  |    209  | 
|    193  |    210  | 
|    194 lst.sortWith((x, y) => x < y) |    211 lst.sortWith((x, y) => x > y) | 
|    195 lst.sortWith(_ > _) |    212 lst.sortWith(_ < _) | 
|    196  |    213  | 
|    197 // but this only works when the arguments are clear, but  |    214 // but this only works when the arguments are clear, but  | 
|    198 // not with multiple occurences |    215 // not with multiple occurences | 
|    199 lst.find(n => odd(n) && n > 2) |    216 lst.find(n => odd(n) && n > 2) | 
|    200  |    217  | 
|    222 def square(x: Int): Int = x * x |    239 def square(x: Int): Int = x * x | 
|    223  |    240  | 
|    224 val lst = (1 to 10).toList |    241 val lst = (1 to 10).toList | 
|    225  |    242  | 
|    226 lst.map(square) |    243 lst.map(square) | 
|         |    244 lst.map(n => square(n)) | 
|         |    245  | 
|         |    246 for (n <- lst) yield square(n) | 
|         |    247  | 
|    227 lst.map(x => (double(x), square(x))) |    248 lst.map(x => (double(x), square(x))) | 
|    228  |    249  | 
|    229 // works also for strings |    250 // works also for strings | 
|    230 def tweet(c: Char) = c.toUpper |    251 def tweet(c: Char) = c.toUpper | 
|    231  |    252  |