mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-12-23 09:41:36 +00:00
Started on Scala
This commit is contained in:
parent
e80e36e142
commit
4f06e456a9
178
scala.html.markdown
Normal file
178
scala.html.markdown
Normal file
@ -0,0 +1,178 @@
|
||||
---
|
||||
language: scala
|
||||
author: Dominic Bou-Samra
|
||||
author_url: http://dbousamra.github.com
|
||||
filename: learnscala.scala
|
||||
---
|
||||
|
||||
Scala is a <insert something nice here>
|
||||
|
||||
```scala
|
||||
|
||||
///////////////////////////////////////
|
||||
// Basic syntax
|
||||
///////////////////////////////////////
|
||||
|
||||
// Single line comments start with two forward slashes
|
||||
/*
|
||||
Multi line comments look like this.
|
||||
*/
|
||||
|
||||
// Import packages
|
||||
import scala.collection.immutable.List
|
||||
// Import all "sub packages"
|
||||
import scala.collection.immutable._
|
||||
// Import multiple classes in one statement
|
||||
import scala.collection.immutable.{List, Map}
|
||||
// Rename an import using '=>'
|
||||
import scala.collection.immutable{ List => ImmutableList }
|
||||
// Import all classes, except some. The following excludes Map and Set:
|
||||
import scala.collection.immutable.{Map => _, Set => _, _}
|
||||
|
||||
// Your programs entry point is defined in an scala file using an object, with a single method, main:
|
||||
object Application {
|
||||
def main(args: Array[String]): Unit = {
|
||||
// stuff goes here.
|
||||
}
|
||||
}
|
||||
|
||||
// Printing, and forcing a new line on the next print
|
||||
println("Hello world!")
|
||||
// Printing, without forcing a new line on next print
|
||||
print("Hello world")
|
||||
|
||||
// Declaring values is done using either var or val
|
||||
// val declarations are immutable, whereas var's are mutable. Immutablility is a good thing.
|
||||
val x = 10 // x is now 10
|
||||
x = 20 // error: reassignment to val
|
||||
var x = 10
|
||||
x = 20 // x is now 20
|
||||
|
||||
///////////////////////////////////////
|
||||
// Types
|
||||
///////////////////////////////////////
|
||||
|
||||
// Almost all types are objects.
|
||||
|
||||
// You have numbers
|
||||
3 //3
|
||||
|
||||
// Math is as per usual
|
||||
1 + 1 // 2
|
||||
2 - 1 // 1
|
||||
5 * 3 // 15
|
||||
6 / 2 // 3
|
||||
|
||||
// Boolean values
|
||||
true
|
||||
false
|
||||
|
||||
// Boolean operations
|
||||
!true // false
|
||||
!false // true
|
||||
true == false // false
|
||||
10 > 5 // true
|
||||
|
||||
// Strings and characters
|
||||
"Scala strings are surrounded by double quotes" //
|
||||
'a' // A Scala Char
|
||||
'Single quote strings don't exist' // Error
|
||||
"Strings have the usual Java methods defined on them".length
|
||||
"They also have some extra Scala methods.".reverse // See scala.collection.immutable.StringOps
|
||||
|
||||
///////////////////////////////////////
|
||||
// Basic control constructs
|
||||
///////////////////////////////////////
|
||||
|
||||
// if statements (else statements are optional)
|
||||
if (10 > 5) println("10 is greater than 5")
|
||||
// an else
|
||||
if (x > 5) println("x is greater than 5")
|
||||
else println("No it's not.")
|
||||
|
||||
// Iteration
|
||||
|
||||
// A while loop
|
||||
while (x < 10) {
|
||||
println("x is still less then 10")
|
||||
x += 1
|
||||
}
|
||||
|
||||
// A do while loop
|
||||
do {
|
||||
println("x is still less then 10");
|
||||
x += 1
|
||||
} while (x < 10)
|
||||
|
||||
// A for loop
|
||||
for (x <- 0 until 10) {
|
||||
println(x)
|
||||
}
|
||||
|
||||
// Any object implementing the map/filter/flatMap methods allows the use of a for loop:
|
||||
val aListOfNumbers: List[Int] = List(1, 2, 3)
|
||||
for (x <- aListOfNumbers) {
|
||||
println(x)
|
||||
}
|
||||
|
||||
// Pattern matching (see respective section)
|
||||
x match {
|
||||
case 5 => println("x is 5")
|
||||
case 10 => println("x is 10")
|
||||
case _ => println("default case")
|
||||
}
|
||||
|
||||
///////////////////////////////////////
|
||||
// Functions, methods and classes
|
||||
///////////////////////////////////////
|
||||
|
||||
// Scala has classes
|
||||
|
||||
// classname is Dog
|
||||
class Dog {
|
||||
//A method called bark, returning a String
|
||||
def bark: String = {
|
||||
// the body of the method
|
||||
"Woof, woof!"
|
||||
}
|
||||
}
|
||||
|
||||
// They can contain nearly any other construct, including other classes, functions, methods, objects, case classes, traits etc.
|
||||
|
||||
///////////////////////////////////////
|
||||
// Higher-order functions
|
||||
///////////////////////////////////////
|
||||
|
||||
// Scala allows methods and functions to return, or take as parameters, other functions or methods.
|
||||
|
||||
val add10: Int => Int = _ + 10 // A function taking an Int and returning an Int
|
||||
List(1, 2, 3) map add10 // List(11, 12, 13) - add10 is applied to each element
|
||||
|
||||
// Anonymous functions can be used instead of named functions:
|
||||
List(1, 2, 3) map (x => x + 10)
|
||||
|
||||
// And the underscore symbol, can be used if there is just one argument to the anonymous function. It gets bound as the variable
|
||||
List(1, 2, 3) map (_ + 10)
|
||||
|
||||
TODO // If the anonymous block AND the function you are applying both take one argument, you can even omit the underscore
|
||||
List("Dom", "Bob", "Natalia") foreach println
|
||||
|
||||
|
||||
// Scala collections have rich higher-order functions defined on them. Some examples:
|
||||
|
||||
// The map function takes a function/method, and applies it to each element in the structure
|
||||
List(1, 2, 3) map (number => number.toString)
|
||||
|
||||
// The filter function takes a predicate (a function from A -> Boolean) and selects all elements which satisfy the predicate
|
||||
List(1, 2, 3) filter (_ > 2) // List(3)
|
||||
List(
|
||||
Person(name = "Dom", age = 23),
|
||||
Person(name = "Bob", age = 30)
|
||||
).filter(_.age > 25) // List(Person("Bob", 30))
|
||||
|
||||
|
||||
// Scala a foreach method defined on certain collections that takes a type returning Unit (a void method)
|
||||
aListOfNumbers foreach (x => println(x))
|
||||
aListOfNumbers foreach println
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user