mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-12-23 17:41:41 +00:00
Added loops, iterators and regex
This commit is contained in:
parent
3f2922d87a
commit
a6ec23d414
@ -93,6 +93,7 @@ s(1)
|
|||||||
// Tuples
|
// Tuples
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Combinators
|
// Combinators
|
||||||
|
|
||||||
s.map(sq)
|
s.map(sq)
|
||||||
@ -114,6 +115,37 @@ for { n <- nSquared2 if n < 10 } yield n
|
|||||||
|
|
||||||
for { n <- s; nSquared = n * n if nSquared < 10} yield nSquared
|
for { n <- s; nSquared = n * n if nSquared < 10} yield nSquared
|
||||||
|
|
||||||
|
/* NB Those were not for loops. The semantics of a for loop is 'repeat', whereas a for-comprehension
|
||||||
|
defines a relationship between two sets of data. Research this further */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Loops and iteration
|
||||||
|
|
||||||
|
1 to 5
|
||||||
|
val r = 1 to 5
|
||||||
|
r.foreach( println )
|
||||||
|
|
||||||
|
r foreach println
|
||||||
|
// NB: Scala is quite lenien when it comes to dots and brackets - study the rules separately. This
|
||||||
|
// helps write DSLs and APIs that read like English
|
||||||
|
|
||||||
|
(5 to 1 by -1) foreach ( println )
|
||||||
|
|
||||||
|
var i = 0
|
||||||
|
while (i < 10) { println("i " + i); i+=1 }
|
||||||
|
|
||||||
|
while (i < 10) { println("i " + i); i+=1 } // Yes, again. What happened? Why?
|
||||||
|
|
||||||
|
i // Show the value of i. Note that while is a loop in the classical sense - it executes
|
||||||
|
// sequentially while changing the loop variable. while is very fast, faster that Java
|
||||||
|
// loops, but using the combinators and comprehensions above is easier to understand
|
||||||
|
// and parallelize
|
||||||
|
|
||||||
|
// Tail recursion is an idiomatic way of doing things in Scala. Recursive functions need an
|
||||||
|
// explicit return type, the compile can't infer it. Here it's Unit.
|
||||||
|
def showNumbersInRange(a:Int, b:Int):Unit = { print(a); if (a < b) showNumbersInRange(a+1, b) }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Conditionals
|
// Conditionals
|
||||||
@ -128,11 +160,13 @@ if (x == 11) println ("yeah") else println("nope")
|
|||||||
println(if (x == 10) "yeah" else "nope")
|
println(if (x == 10) "yeah" else "nope")
|
||||||
val text = if (x == 10) "yeah" else "nope"
|
val text = if (x == 10) "yeah" else "nope"
|
||||||
|
|
||||||
|
var i = 0
|
||||||
|
while (i < 10) { println("i " + i); i+=1 }
|
||||||
|
|
||||||
// Object oriented features
|
// Object oriented features
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Case classes
|
// Case classes
|
||||||
|
|
||||||
case class Person(name:String, phoneNumber:String)
|
case class Person(name:String, phoneNumber:String)
|
||||||
@ -141,6 +175,7 @@ Person("George", "1234") == Person("Kate", "1236")
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Pattern matching
|
// Pattern matching
|
||||||
|
|
||||||
val me = Person("George", "1234")
|
val me = Person("George", "1234")
|
||||||
@ -163,7 +198,14 @@ kate match { case Person("Kate", _) => "Girl"; case Person("George", _) => "Boy"
|
|||||||
|
|
||||||
// Regular expressions
|
// Regular expressions
|
||||||
|
|
||||||
// TODO
|
val email = "(.*)@(.*)".r // The suffix .r invokes method r on String, which makes it a Regex
|
||||||
|
|
||||||
|
val email(user, domain) = "henry@zkpr.com"
|
||||||
|
|
||||||
|
"mrbean@pyahoo.com" match {
|
||||||
|
case email(name, domain) => "I know your name, " + name
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Strings
|
// Strings
|
||||||
@ -178,6 +220,16 @@ println(s"We have $n apples")
|
|||||||
val a = Array(11, 9, 6)
|
val a = Array(11, 9, 6)
|
||||||
println(s"My second daughter is ${a(2-1)} years old")
|
println(s"My second daughter is ${a(2-1)} years old")
|
||||||
|
|
||||||
|
// Some characters need to be 'escaped', e.g. a double quote inside a string:
|
||||||
|
val a = "They stood outside the \"Rose and Crown\""
|
||||||
|
|
||||||
|
// Triple double-quotes allow for strings to span multiple rows and contain funny characters
|
||||||
|
val html = """<form id="daform">
|
||||||
|
<p>Press belo', Joe</p>
|
||||||
|
| <input type="submit">
|
||||||
|
</form>"""
|
||||||
|
|
||||||
|
|
||||||
// Input and output
|
// Input and output
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user