mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-12-23 17:41:41 +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