mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-12-25 02:15:57 +00:00
Merge branch 'master' of github.com:adambard/learnxinyminutes-docs
This commit is contained in:
commit
171f179f6e
@ -5,6 +5,7 @@ contributors:
|
||||
- ["George Petrov", "http://github.com/petrovg"]
|
||||
- ["Dominic Bou-Samra", "http://dbousamra.github.com"]
|
||||
- ["Geoff Liu", "http://geoffliu.me"]
|
||||
- ["Ha-Duong Nguyen", "http://reference-error.org"]
|
||||
filename: learn.scala
|
||||
---
|
||||
|
||||
@ -16,15 +17,16 @@ Scala - the scalable language
|
||||
Set yourself up:
|
||||
|
||||
1) Download Scala - http://www.scala-lang.org/downloads
|
||||
2) unzip/untar in your favourite location and put the bin subdir on the path
|
||||
3) Start a scala REPL by typing scala. You should see the prompt:
|
||||
2) Unzip/untar to your favourite location and put the bin subdir in your `PATH` environment variable
|
||||
3) Start a Scala REPL by running `scala`. You should see the prompt:
|
||||
|
||||
scala>
|
||||
|
||||
This is the so called REPL (Read-Eval-Print Loop). You may type any valid
|
||||
Scala expression into it, and the result will be printed. We will explain what
|
||||
Scala files look like further into this tutorial, but for now, let's start
|
||||
with some basics.
|
||||
This is the so called REPL (Read-Eval-Print Loop). You may type any Scala
|
||||
expression, and the result will be printed. We will explain what Scala files
|
||||
look like further into this tutorial, but for now, let's start with some
|
||||
basics.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
@ -32,10 +34,10 @@ Scala - the scalable language
|
||||
// 1. Basics
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
// Single line comments start with two forward slashes
|
||||
// Single-line comments start with two forward slashes
|
||||
|
||||
/*
|
||||
Multi line comments, as you can already see from above, look like this.
|
||||
Multi-line comments, as you can already see from above, look like this.
|
||||
*/
|
||||
|
||||
// Printing, and forcing a new line on the next print
|
||||
@ -46,7 +48,7 @@ println(10)
|
||||
print("Hello world")
|
||||
|
||||
// Declaring values is done using either var or val.
|
||||
// val declarations are immutable, whereas var's are mutable. Immutability is
|
||||
// val declarations are immutable, whereas vars are mutable. Immutability is
|
||||
// a good thing.
|
||||
val x = 10 // x is now 10
|
||||
x = 20 // error: reassignment to val
|
||||
@ -239,7 +241,7 @@ i // Show the value of i. Note that while is a loop in the classical sense -
|
||||
|
||||
// A do while loop
|
||||
do {
|
||||
println("x is still less than 10");
|
||||
println("x is still less than 10")
|
||||
x += 1
|
||||
} while (x < 10)
|
||||
|
||||
@ -629,13 +631,8 @@ writer.close()
|
||||
|
||||
## Further resources
|
||||
|
||||
[Scala for the impatient](http://horstmann.com/scala/)
|
||||
|
||||
[Twitter Scala school](http://twitter.github.io/scala_school/)
|
||||
|
||||
[The scala documentation](http://docs.scala-lang.org/)
|
||||
|
||||
[Try Scala in your browser](http://scalatutorials.com/tour/)
|
||||
|
||||
Join the [Scala user group](https://groups.google.com/forum/#!forum/scala-user)
|
||||
|
||||
* [Scala for the impatient](http://horstmann.com/scala/)
|
||||
* [Twitter Scala school](http://twitter.github.io/scala_school/)
|
||||
* [The scala documentation](http://docs.scala-lang.org/)
|
||||
* [Try Scala in your browser](http://scalatutorials.com/tour/)
|
||||
* Join the [Scala user group](https://groups.google.com/forum/#!forum/scala-user)
|
||||
|
@ -4,6 +4,7 @@ contributors:
|
||||
- ["Grant Timmerman", "http://github.com/grant"]
|
||||
- ["Christopher Bess", "http://github.com/cbess"]
|
||||
- ["Joey Huang", "http://github.com/kamidox"]
|
||||
- ["Anthony Nguyen", "http://github.com/anthonyn60"]
|
||||
filename: learnswift.swift
|
||||
---
|
||||
|
||||
@ -26,7 +27,9 @@ import UIKit
|
||||
// TODO: Do something soon
|
||||
// FIXME: Fix this code
|
||||
|
||||
println("Hello, world")
|
||||
// In Swift 2, println and print were combined into one print method. Print automatically appends a new line.
|
||||
print("Hello, world") // println is now print
|
||||
print("Hello, world", appendNewLine: false) // printing without appending a newline
|
||||
|
||||
// variables (var) value can change after being set
|
||||
// constants (let) value can NOT be changed after being set
|
||||
@ -46,12 +49,12 @@ let piText = "Pi = \(π), Pi 2 = \(π * 2)" // String interpolation
|
||||
// Build Specific values
|
||||
// uses -D build configuration
|
||||
#if false
|
||||
println("Not printed")
|
||||
print("Not printed")
|
||||
let buildValue = 3
|
||||
#else
|
||||
let buildValue = 7
|
||||
#endif
|
||||
println("Build value: \(buildValue)") // Build value: 7
|
||||
print("Build value: \(buildValue)") // Build value: 7
|
||||
|
||||
/*
|
||||
Optionals are a Swift language feature that allows you to store a `Some` or
|
||||
@ -69,7 +72,7 @@ var someOptionalString2: Optional<String> = "optional"
|
||||
if someOptionalString != nil {
|
||||
// I am not nil
|
||||
if someOptionalString!.hasPrefix("opt") {
|
||||
println("has the prefix")
|
||||
print("has the prefix")
|
||||
}
|
||||
|
||||
let empty = someOptionalString?.isEmpty
|
||||
@ -138,21 +141,21 @@ var emptyMutableDictionary = [String: Float]() // var == mutable
|
||||
let myArray = [1, 1, 2, 3, 5]
|
||||
for value in myArray {
|
||||
if value == 1 {
|
||||
println("One!")
|
||||
print("One!")
|
||||
} else {
|
||||
println("Not one!")
|
||||
print("Not one!")
|
||||
}
|
||||
}
|
||||
|
||||
// for loop (dictionary)
|
||||
var dict = ["one": 1, "two": 2]
|
||||
for (key, value) in dict {
|
||||
println("\(key): \(value)")
|
||||
print("\(key): \(value)")
|
||||
}
|
||||
|
||||
// for loop (range)
|
||||
for i in -1...shoppingList.count {
|
||||
println(i)
|
||||
print(i)
|
||||
}
|
||||
shoppingList[1...2] = ["steak", "peacons"]
|
||||
// use ..< to exclude the last number
|
||||
@ -165,7 +168,7 @@ while i < 1000 {
|
||||
|
||||
// do-while loop
|
||||
do {
|
||||
println("hello")
|
||||
print("hello")
|
||||
} while 1 == 2
|
||||
|
||||
// Switch
|
||||
@ -222,8 +225,8 @@ let pricesTuple = getGasPrices()
|
||||
let price = pricesTuple.2 // 3.79
|
||||
// Ignore Tuple (or other) values by using _ (underscore)
|
||||
let (_, price1, _) = pricesTuple // price1 == 3.69
|
||||
println(price1 == pricesTuple.1) // true
|
||||
println("Gas price: \(price)")
|
||||
print(price1 == pricesTuple.1) // true
|
||||
print("Gas price: \(price)")
|
||||
|
||||
// Variadic Args
|
||||
func setup(numbers: Int...) {
|
||||
@ -251,7 +254,7 @@ func swapTwoInts(inout a: Int, inout b: Int) {
|
||||
var someIntA = 7
|
||||
var someIntB = 3
|
||||
swapTwoInts(&someIntA, &someIntB)
|
||||
println(someIntB) // 7
|
||||
print(someIntB) // 7
|
||||
|
||||
|
||||
//
|
||||
@ -305,7 +308,7 @@ struct NamesTable {
|
||||
// Structures have an auto-generated (implicit) designated initializer
|
||||
let namesTable = NamesTable(names: ["Me", "Them"])
|
||||
let name = namesTable[1]
|
||||
println("Name is \(name)") // Name is Them
|
||||
print("Name is \(name)") // Name is Them
|
||||
|
||||
//
|
||||
// MARK: Classes
|
||||
@ -386,7 +389,7 @@ let aShape = mySquare as Shape
|
||||
|
||||
// compare instances, not the same as == which compares objects (equal to)
|
||||
if mySquare === mySquare {
|
||||
println("Yep, it's mySquare")
|
||||
print("Yep, it's mySquare")
|
||||
}
|
||||
|
||||
// Optional init
|
||||
@ -409,13 +412,13 @@ class Circle: Shape {
|
||||
}
|
||||
|
||||
var myCircle = Circle(radius: 1)
|
||||
println(myCircle?.getArea()) // Optional(3)
|
||||
println(myCircle!.getArea()) // 3
|
||||
print(myCircle?.getArea()) // Optional(3)
|
||||
print(myCircle!.getArea()) // 3
|
||||
var myEmptyCircle = Circle(radius: -1)
|
||||
println(myEmptyCircle?.getArea()) // "nil"
|
||||
print(myEmptyCircle?.getArea()) // "nil"
|
||||
if let circle = myEmptyCircle {
|
||||
// will not execute since myEmptyCircle is nil
|
||||
println("circle is not nil")
|
||||
print("circle is not nil")
|
||||
}
|
||||
|
||||
|
||||
@ -447,7 +450,7 @@ enum BookName: String {
|
||||
case John = "John"
|
||||
case Luke = "Luke"
|
||||
}
|
||||
println("Name: \(BookName.John.rawValue)")
|
||||
print("Name: \(BookName.John.rawValue)")
|
||||
|
||||
// Enum with associated Values
|
||||
enum Furniture {
|
||||
@ -467,9 +470,9 @@ enum Furniture {
|
||||
}
|
||||
|
||||
var desk: Furniture = .Desk(height: 80)
|
||||
println(desk.description()) // "Desk with 80 cm"
|
||||
print(desk.description()) // "Desk with 80 cm"
|
||||
var chair = Furniture.Chair("Foo", 40)
|
||||
println(chair.description()) // "Chair of Foo with 40 cm"
|
||||
print(chair.description()) // "Chair of Foo with 40 cm"
|
||||
|
||||
|
||||
//
|
||||
@ -522,7 +525,7 @@ extension Square: Printable {
|
||||
}
|
||||
}
|
||||
|
||||
println("Square: \(mySquare)")
|
||||
print("Square: \(mySquare)")
|
||||
|
||||
// You can also extend built-in types
|
||||
extension Int {
|
||||
@ -535,8 +538,8 @@ extension Int {
|
||||
}
|
||||
}
|
||||
|
||||
println(7.customProperty) // "This is 7"
|
||||
println(14.multiplyBy(3)) // 42
|
||||
print(7.customProperty) // "This is 7"
|
||||
print(14.multiplyBy(3)) // 42
|
||||
|
||||
// Generics: Similar to Java and C#. Use the `where` keyword to specify the
|
||||
// requirements of the generics.
|
||||
@ -550,7 +553,7 @@ func findIndex<T: Equatable>(array: [T], valueToFind: T) -> Int? {
|
||||
return nil
|
||||
}
|
||||
let foundAtIndex = findIndex([1, 2, 3, 4], 3)
|
||||
println(foundAtIndex == 2) // true
|
||||
print(foundAtIndex == 2) // true
|
||||
|
||||
// Operators:
|
||||
// Custom operators can start with the characters:
|
||||
@ -566,9 +569,9 @@ prefix func !!! (inout shape: Square) -> Square {
|
||||
}
|
||||
|
||||
// current value
|
||||
println(mySquare.sideLength) // 4
|
||||
print(mySquare.sideLength) // 4
|
||||
|
||||
// change side length using custom !!! operator, increases size by 3
|
||||
!!!mySquare
|
||||
println(mySquare.sideLength) // 12
|
||||
print(mySquare.sideLength) // 12
|
||||
```
|
||||
|
Loading…
Reference in New Issue
Block a user