mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-12-23 23:33:00 +03:00
Added loops, iterators and regex
This commit is contained in:
parent
3f2922d87a
commit
a6ec23d414
@ -93,6 +93,7 @@ s(1)
|
||||
// Tuples
|
||||
|
||||
|
||||
|
||||
// Combinators
|
||||
|
||||
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
|
||||
|
||||
/* 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
|
||||
@ -128,11 +160,13 @@ if (x == 11) println ("yeah") else println("nope")
|
||||
println(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
|
||||
|
||||
|
||||
|
||||
// Case classes
|
||||
|
||||
case class Person(name:String, phoneNumber:String)
|
||||
@ -141,6 +175,7 @@ Person("George", "1234") == Person("Kate", "1236")
|
||||
|
||||
|
||||
|
||||
|
||||
// Pattern matching
|
||||
|
||||
val me = Person("George", "1234")
|
||||
@ -163,7 +198,14 @@ kate match { case Person("Kate", _) => "Girl"; case Person("George", _) => "Boy"
|
||||
|
||||
// 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
|
||||
@ -178,6 +220,16 @@ println(s"We have $n apples")
|
||||
val a = Array(11, 9, 6)
|
||||
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
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user