ๆญค้กต้ขๆไพไบ JavaScript ๅ Scala ็ผ็จ่ฏญ่จไน้ด็ๆฏ่พใ ๅฎ้็จไบไบ่งฃ JavaScript ๅนถๅธๆไบ่งฃ Scala ็็จๅบๅ๏ผ็นๅซๆฏ้่ฟๆฅ็ JavaScript ่ฏญ่จๅ่ฝไธ Scala ๆฏ่พ็็คบไพใ
ๆฆ่ฟฐ
ๆฌ่ๅฏนไปฅไธๅ่่ฟ่กไบ็ธๅฏน็ฎ็ญ็ไป็ปๅๆป็ปใ ๅฎไป้ซๅฑๆฌกไธไป็ปไบ JavaScript ๅ Scala ไน้ด็ๅผๅ๏ผ็ถๅไป็ปไบๆจๅจๆฏๅคฉ็ผๅไปฃ็ ๆถไผ้ๅฐ็ๅทฎๅผใ
้ซๅฑๆฌก็็ธไผผๆง
ๅจ้ซๅฑๆฌกไธ๏ผScala ไธ JavaScript ๆไปฅไธ็ธไผผไนๅค๏ผ
- ไธค่ ้ฝ่ขซ่ฎคไธบๆฏ้ซ็บง็ผ็จ่ฏญ่จ๏ผๆจไธๅฟ ๅ ณๅฟๆ้ๅๆๅจๅ ๅญ็ฎก็็ญไฝ็บงๆฆๅฟต
- ไธค่ ้ฝๆไธไธช็ธๅฏน็ฎๅใ็ฎๆด็่ฏญๆณ
- ไธค่ ้ฝๆฏๆ C/C++/Java ้ฃๆ ผ็่ฑๆฌๅท่ฏญๆณ๏ผ็จไบ็ผๅๆนๆณๅๅ ถไปไปฃ็ ๅ
- ไธค่ ้ฝๅ ๆฌ้ขๅๅฏน่ฑก็ผ็จ (OOP) ็็นๆง๏ผๅฆ็ฑป๏ผ
- ไธค่ ้ฝๅ ๅซ็จไบ ๅฝๆฐๅผ็ผ็จ (FP) ็๏ผๅฆ lambda๏ผ
- JavaScript ๅจๆต่งๅจๅ Node.js ็ญๅ ถไป็ฏๅขไธญ่ฟ่กใ Scala ็ Scala.js ้ฃๆ ผไปฅ JavaScript ไธบ็ฎๆ ๏ผๅ ๆญค Scala ็จๅบๅฏไปฅๅจ็ธๅ็็ฏๅขไธญ่ฟ่กใ
- ๅผๅไบบๅไฝฟ็จ Node.js ๅจ JavaScript ๅ Scala ไธญ็ผๅๆๅกๅจ็ซฏๅบ็จ็จๅบ๏ผ Play Framework ไน็ฑป็้กน็ฎไนๅฏไปฅ่ฎฉๆจๅจ Scala ไธญ็ผๅๆๅกๅจ็ซฏๅบ็จ็จๅบ
- ไธค็ง่ฏญ่จ้ฝๆ็ธไผผ็
if
่ฏญๅฅใwhile
ๅพช็ฏๅfor
ๅพช็ฏ - ไป ๅจ่ฟไธช Scala.js ้กต้ข ๅผๅง๏ผๆจไผๅ็ฐ่ฎธๅคๆฏๆ ReactใAngularใjQuery ๅ่ฎธๅคๅ ถไป JavaScript ๅScala ๅบ
- JavaScript ๅฏน่ฑกๆฏๅฏๅ็๏ผไปฅๅฝไปคๅผ้ฃๆ ผ็ผๅๆถ๏ผScala ๅฏน่ฑก_ๅฏไปฅ_ๆฏๅฏๅ็
- JavaScript ๅ Scala ้ฝๆฏๆ promises ไฝไธบๅค็ๅผๆญฅ่ฎก็ฎ็ปๆ็ไธ็งๆนๅผ๏ผScala concurrency ไฝฟ็จๆ่ดงๅๆฟ่ฏบ๏ผ
้ซๅฑๆฌกๅทฎๅผ
ๅๆ ทๅจ้ซๅฑๆฌกไธ๏ผJavaScript ๅ Scala ไน้ด็ไธไบๅบๅซๆฏ๏ผ
- JavaScript ๆฏๅจๆ็ฑปๅ็๏ผScala ๆฏ้ๆ็ฑปๅ็
- ๅฐฝ็ฎก Scala ๆฏ้ๆ็ฑปๅ็๏ผไฝ็ฑปๅๆจๆญไน็ฑป็็นๆง่ฎฉๅฎๆ่งๅๆฏไธ็งๅจๆ่ฏญ่จ๏ผๆญฃๅฆๆจๅฐๅจไธ้ข็็คบไพไธญ็ๅฐ็้ฃๆ ท๏ผ
- Scala ๆฏ็จ่ฏญ้ป่ฎคๆฏๆไธๅๆง๏ผ้ผๅฑๆจไฝฟ็จไธๅฏๅๅ้ๅไธๅฏๅ้ๅ
- Scala ่ฏญๆณ็ฎๆดๆ่ฏป๏ผๆไปฌ็งฐไนไธบ_่กจ็ฐๅ_
- Scala ๆฏไธ็ง็บฏ OOP ่ฏญ่จ๏ผๅ ๆญคๆฏไธชๅฏน่ฑก้ฝๆฏ็ฑป็ไธไธชๅฎไพ๏ผ่ๅ่ฟ็ฎ็ฌฆไธๆ ท็็ฌฆๅท
+
ๅ+=
ๆฏ็ๆญฃ็ๆนๆณ๏ผ่ฟๆๅณ็ๆจๅฏไปฅๅๅปบ่ชๅทฑ็ๆนๆณไฝไธบ่ฟ็ฎ็ฌฆ - ไฝไธบไธ็ง็บฏ OOP ่ฏญ่จๅ็บฏ FP ่ฏญ่จ๏ผScala ้ผๅฑ OOP ๅ FP ็่ๅ๏ผๅ ทๆ็จไบ้ป่พ็ๅฝๆฐๅ็จไบๆจกๅๅ็ไธๅฏๅๅฏน่ฑก
- Scala ๆฅๆๆๅ ่ฟ็็ฌฌไธๆนๅผๆบๅฝๆฐๅผ็ผ็จๅบ
- Scala ไธญ็ไธๅ้ฝๆฏไธไธช_่กจ่พพๅผ_๏ผๅ
if
่ฏญๅฅใfor
ๅพช็ฏใmatch
่กจ่พพๅผ๏ผ็่ณtry
/catch
่กจ่พพๅผ้ฝๆ่ฟๅๅผ - Scala Native ้กน็ฎ่ฎฉๆจๅฏไปฅ็ผๅโ็ณป็ปโ็บงไปฃ็ ๏ผไนๅฏไปฅ็ผ่ฏไธบๆฌๆบๅฏๆง่กๆไปถ
็ผ็จๅฑๆฌกๅทฎๅผ
ๅจ่พไฝ็ๅฑๆฌกไธ๏ผ่ฟไบๆฏๆจๅจ็ผๅไปฃ็ ๆถๆฏๅคฉ้ฝไผ็ๅฐ็ไธไบๅทฎๅผ๏ผ
- Scala ๅ้ๅๅๆฐไฝฟ็จ
val
๏ผไธๅฏๅ๏ผๅฆ JavaScriptconst
๏ผๆvar
๏ผๅฏๅ๏ผๅฆ JavaScriptvar
ๆlet
๏ผๅฎไน - Scala ไธๅจ่กๅฐพไฝฟ็จๅๅท
- Scala ๆฏ้ๆ็ฑปๅ็๏ผๅฐฝ็ฎกๅจ่ฎธๅคๆ ๅตไธๆจไธ้่ฆๅฃฐๆ็ฑปๅ
- Scala ไฝฟ็จ trait ไฝไธบๆฅๅฃๅนถๅๅปบ_ๆททๆญ_
- ้คไบ็ฎๅ็
for
ๅพช็ฏไนๅค๏ผScala ่ฟๅ ทๆๅผบๅคง็for
comprehensions๏ผๅฏไปฅๆ นๆฎๆจ็็ฎๆณไบง็็ปๆ - ๆจกๅผๅน้
ๅ
match
่กจ่พพๅผๅฐๆนๅไฝ ็ผๅไปฃ็ ็ๆนๅผ - Scala ็ Scala ็ ไธไธๆๆฝ่ฑก ๅ ๆฏ่ฏญๆจๅฏผ ๆไพไบไธ็ณปๅ็นๆง๏ผ
- ๆฉๅฑๆนๆณ ๅ ่ฎธๆจๅจไธ็ ดๅๆจกๅๅ็ๆ ๅตไธๅๅฐ้ญ็ฑปๆทปๅ ๆฐๅ่ฝ๏ผๆนๆณๆฏไป ๅจ็นๅฎ่ๅดๅ ๅฏ็จ๏ผไธ็ดๅญ่กฅไธ็ธๅ๏ผๅฎไผๆฑกๆไปฃ็ ็ๅ ถไปๅบๅ๏ผ
- ็ปๅฎไพ ่ฎฉๆจๅฎไน็ผ่ฏๅจๅฏไปฅ็จๆฅไธบๆจๅๆไปฃ็ ็ๆฏ่ฏญ
- ็ฑปๅๅฎๅ จๅๅคๅ ็ญๅผ่ฎฉๆจๅฐ็ธ็ญๆฏ่พโโๅจ็ผ่ฏๆถโโไป ้ไบ้ฃไบๆๆไน็ๆฏ่พ
- ็ฑไบๅ็งฐๅๆฐใไธญ็ผ็ฌฆๅทใๅฏ้ๆฌๅทใๆฉๅฑๆนๆณๅ ้ซ้ถๅฝๆฐ ็ญๅ่ฝ๏ผๆจๅฏไปฅๅๅปบ่ชๅทฑ็โๆงๅถ็ปๆโๅ DSL
- ๆจๅฏไปฅๅจๆฌไนฆไธญ้ ่ฏปๅฐ่ฎธๅคๅ ถไปๅฅฝไธ่ฅฟ๏ผๆ ทไพ็ฑปใไผด็็ฑปๅๅฏน่ฑกใๅฎใ[่ๅ][union-type]ๅไบค้็ฑปๅใๅคๅๆฐๅ่กจใๅฝๅๅๆฐ็ญ
ๅ้ๅ็ฑปๅ
ๆณจ้
//
|
//
|
ๅฏๅๅ้
let // now preferred for mutable
|
var // used for mutable variables
|
ไธๅฏๅๅ้
const
|
val
|
Scala ็็ป้ชๆณๅๆฏไฝฟ็จ val
ๅฃฐๆๅ้๏ผ้ค้ๆ็นๅฎๅๅ ้่ฆๅฏๅๅ้ใ
ๅฝๅๆ ๅ
JavaScript ๅ Scala ้ๅธธไฝฟ็จ็ธๅ็ CamelCase ๅฝๅๆ ๅใ
ๅ้ๅฝๅไธบ myVariableName
๏ผๆนๆณๅฝๅไธบ lastIndexOf
๏ผ็ฑปๅๅฏน่ฑกๅฝๅไธบ Animal
ๅ PrintedBook
ใ
ๅญ็ฌฆไธฒ
JavaScript ๅ Scala ไธญๅญ็ฌฆไธฒ็่ฎธๅค็จๆณ็ธไผผ๏ผไฝ Scala ไป ๅฏน็ฎๅๅญ็ฌฆไธฒไฝฟ็จๅๅผๅท๏ผๅฏนๅค่กๅญ็ฌฆไธฒไฝฟ็จไธๅผๅทใ
ๅญ็ฌฆไธฒๅบ็ก
// use single- or double-quotes
|
// use only double-quotes
|
ๆๅ ฅ
let name = 'Joe';
|
val name = "Joe"
|
ๅธฆๆๅ ฅ็ๅค่กๅญ็ฌฆไธฒ
let name = "joe";
|
val name = "Martin Odersky"
|
JavaScript ๅ Scala ไนๆ็ฑปไผผ็ๅค็ๅญ็ฌฆไธฒ็ๆนๆณ๏ผๅ
ๆฌ charAt
ใconcat
ใindexOf
็ญ็ญใ
\n
ใ\f
ใ\t
็ญ่ฝฌไนๅญ็ฌฆๅจไธค็ง่ฏญ่จไธญไนๆฏ็ธๅ็ใ
ๆฐๅญๅ็ฎๆฏ
JavaScript ๅ Scala ไน้ด็ๆฐๅญ่ฟ็ฎ็ฌฆๅพ็ธไผผใ
ๆๅคง็ไธๅๆฏ Scala ไธๆไพ ++
ๅ --
่ฟ็ฎ็ฌฆใ
ๆฐๅญ่ฟ็ฎ็ฌฆ๏ผ
let x = 1;
|
val x = 1
|
่ชๅขๅ่ชๅ๏ผ
i++;
|
i += 1;
|
ๆ่ฎธๆๅคง็ๅบๅซๅจไบๅ+
ๅ-
่ฟๆ ท็โๆไฝ็ฌฆโๅจScalaไธญๅฎ้
ไธๆฏ_ๆนๆณ_๏ผ่ไธๆฏๆไฝ็ฌฆใ
Scala ๆฐๅญไนๆ่ฟไบ็ธๅ
ณ็ๆนๆณ๏ผ
var a = 2
a *= 2 // 4
a /= 2 // 2
Scala ็ Double
็ฑปๅๆๆฅ่ฟไบ JavaScript ็้ป่ฎค number
็ฑปๅ๏ผ
Int
่กจ็คบๆ็ฌฆๅท็ 32 ไฝๆดๆฐๅผ๏ผ่ BigInt
ๅฏนๅบไบ JavaScript ็ bigint
ใ
่ฟไบๆฏ Scala Int
ๅ Double
ๅผใ
่ฏทๆณจๆ๏ผ็ฑปๅไธๅฟ
ๆพๅผๅฃฐๆ๏ผ
val i = 1 // Int
val d = 1.1 // Double
ไฝ ๅฏไปฅๆ้่ฆไฝฟ็จๅ ถๅฎๆฐๅญ็ฑปๅ๏ผ
val a: Byte = 0 // Byte = 0
val a: Double = 0 // Double = 0.0
val a: Float = 0 // Float = 0.0
val a: Int = 0 // Int = 0
val a: Long = 0 // Long = 0
val a: Short = 0 // Short = 0
val x = BigInt(1_234_456_789)
val y = BigDecimal(1_234_456.890)
ๅธๅฐๅผ
ไธคไธช่ฏญ่จ้ฝๅจๅธๅฐๅผไธญ็จ true
ๅ false
ใ
let a = true;
|
val a = true
|
ๆฅๆ
ๆฅๆๆฏไธค็ง่ฏญ่จไธญๅฆไธ็งๅธธ็จ็็ฑปๅใ
่ทๅๅฝๅๆฅๆ๏ผ
let d = new Date();
|
// different ways to get the current date and time
|
ๆๅฎไธๅ็ๆฅๆ๏ผ
let d = Date(2020, 1, 21, 1, 0, 0, 0);
|
val d = LocalDate.of(2020, 1, 21)
|
ๅจ่ฟ็งๆ ๅตไธ๏ผScala ไฝฟ็จ Java ้ๅธฆ็ๆฅๆๅๆถ้ด็ฑปใ JavaScript ๅ Scala ไน้ด็่ฎธๅคๆฅๆ/ๆถ้ดๆนๆณๆฏ็ธไผผ็ใ ๆๅ ณ่ฏฆ็ปไฟกๆฏ๏ผ่ฏทๅ้ java.time ๅ ใ
ๅฝๆฐ
ๅจ JavaScript ๅ Scala ไธญ๏ผๅฝๆฐ้ฝๆฏๅฏน่ฑก๏ผๅ ๆญคๅฎไปฌ็ๅ่ฝ็ธไผผ๏ผไฝๅฎไปฌ็่ฏญๆณๅๆฏ่ฏญ็ฅๆไธๅใ
ๅฝๅๅฝๆฐ๏ผไธ่ก๏ผ
function add(a, b) {
|
// technically this is a method, not a function
|
ๅฝๅๅฝๆฐ๏ผๅค่ก๏ผ
function addAndDouble(a, b) {
|
def addAndDouble(a: Int, b: Int): Int =
|
ๅจ Scala ไธญ๏ผๆพ็คบ Int
่ฟๅ็ฑปๅๆฏๅฏ้็ใ
ๅฎ_ไธ_ๆพ็คบๅจ add
็คบไพไธญ๏ผ่_ๆฏ_ๆพ็คบๅจ addAndDouble
็คบไพไธญ๏ผๅ ๆญคๆจๅฏไปฅ็ๅฐ่ฟไธค็งๆนๆณใ
ๅฟๅๅฝๆฐ
JavaScript ๅ Scala ้ฝๅ ่ฎธๆจๅฎไนๅฟๅๅฝๆฐ๏ผๆจๅฏไปฅๅฐๅ ถไผ ้็ปๅ ถไปๅฝๆฐๅๆนๆณใ
็ฎญๅคดๅๅฟๅๅฝๆฐ
// arrow function
|
// a function (an anonymous function assigned to a variable)
|
ๅจ Scala ไธญ๏ผๆจๅพๅฐไฝฟ็จๆ็คบ็็ฌฌไธ็ง่ฏญๆณๆฅๅฎไนๅฝๆฐใ ็ธๅ๏ผๆจ็ปๅธธๅจไฝฟ็จ็นๅฎไนๅฟๅๅฝๆฐใ ่ฎธๅค้ๅๆนๆณๆฏ ้ซ้ถๅฝๆฐๅนถๆฅๅๅฝๆฐๅๆฐ๏ผๅ ๆญคๆจ็ผๅๅฆไธไปฃ็ ๏ผ
// map method, long form
List(1,2,3).map(i => i * 10) // List(10,20,30)
// map, short form (which is more commonly used)
List(1,2,3).map(_ * 10) // List(10,20,30)
// filter, short form
List(1,2,3).filter(_ < 3) // List(1,2)
// filter and then map
List(1,2,3,4,5).filter(_ < 3).map(_ * 10) // List(10, 20)
็ฑป
Scala ๆขๆ็ฑปไนๆๆ ทไพ็ฑปใ ็ฑป ไธ JavaScript ็ฑป็ธไผผ๏ผ้ๅธธ็จไบ OOP ้ฃๆ ผๅบ็จ็จๅบ๏ผๅฐฝ็ฎกๅฎไปฌไนๅฏไปฅๅจ FP ไปฃ็ ไธญไฝฟ็จ๏ผ๏ผๅนถไธ _ๆ ทไพ็ฑป_ๆ้ๅ ็็นๆง๏ผ่ฟ่ฎฉๅฎๅจ FP ้ฃๆ ผๅบ็จไธญๅพๆ็จใ
ไธ้ข็ไพๅญๅฑ็คบไบๅฆไฝๅๅปบๅ ไธช็ฑปๅไฝไธบๆไธพ๏ผ็ถๅๅฎไนไธไธช OOP ้ฃๆ ผ็ Pizza
็ฑปใ
ๆๅ๏ผๅๅปบๅนถไฝฟ็จไบไธไธช Pizza
ๅฎไพ๏ผ
// create some enumerations that the Pizza class will use
enum CrustSize:
case Small, Medium, Large
enum CrustType:
case Thin, Thick, Regular
enum Topping:
case Cheese, Pepperoni, BlackOlives, GreenOlives, Onions
// import those enumerations and the ArrayBuffer,
// so the Pizza class can use them
import CrustSize.*
import CrustType.*
import Topping.*
import scala.collection.mutable.ArrayBuffer
// define an OOP style Pizza class
class Pizza(
var crustSize: CrustSize,
var crustType: CrustType
):
private val toppings = ArrayBuffer[Topping]()
def addTopping(t: Topping): Unit =
toppings += t
def removeTopping(t: Topping): Unit =
toppings -= t
def removeAllToppings(): Unit =
toppings.clear()
override def toString(): String =
s"""
|Pizza:
| Crust Size: ${crustSize}
| Crust Type: ${crustType}
| Toppings: ${toppings}
""".stripMargin
end Pizza
// create a Pizza instance
val p = Pizza(Small, Thin)
// change the crust
p.crustSize = Large
p.crustType = Thick
// add and remove toppings
p.addTopping(Cheese)
p.addTopping(Pepperoni)
p.addTopping(BlackOlives)
p.removeTopping(Pepperoni)
// print the pizza, which uses its `toString` method
println(p)
ๆฅๅฃใtrait ๅ็ปงๆฟ
Scala ไฝฟ็จ trait ไฝไธบๆฅๅฃ๏ผไนๅฏไปฅๅๅปบๆททๆญใ trait ๅฏไปฅๆๆฝ่ฑกๅๅ ทไฝ็ๆๅ๏ผๅ ๆฌๆนๆณๅๅญๆฎตใ
่ฟไธชไพๅญๅฑ็คบไบๅฆไฝๅฎไนไธคไธช traits๏ผๅๅปบไธไธชๆฉๅฑๅๅฎ็ฐ่ฟไบ traits ็็ฑป๏ผ็ถๅๅๅปบๅไฝฟ็จ่ฏฅ็ฑป็ไธไธชๅฎไพ๏ผ
trait HasLegs:
def numLegs: Int
def walk(): Unit
def stop() = println("Stopped walking")
trait HasTail:
def wagTail(): Unit
def stopTail(): Unit
class Dog(var name: String) extends HasLegs, HasTail:
val numLegs = 4
def walk() = println("Iโm walking")
def wagTail() = println("โโโ โโโ")
def stopTail() = println("Tail is stopped")
override def toString = s"$name is a Dog"
// create a Dog instance
val d = Dog("Rover")
// use the classโs attributes and behaviors
println(d.numLegs) // 4
d.wagTail() // "โโโ โโโ"
d.walk() // "Iโm walking"
ๆงๅถ็ปๆ
้คไบๅจ JavaScript ไธญไฝฟ็จ ===
ๅ !==
ไนๅค๏ผๆฏ่พๅ้ป่พ่ฟ็ฎ็ฌฆๅจ JavaScript ๅ Scala ไธญๅ ไน็ธๅใ
ๆฏ่พ่ฟ็ฎ็ฌฆ
JavaScript | Scala |
---|---|
== |
== |
=== |
== |
!= |
!= |
!== |
!= |
> |
> |
< |
< |
>= |
>= |
<= |
<= |
้ป่พ่ฟ็ฎ็ฌฆ
JavaScript | Scala |
---|---|
&&
|
&&
|
if/then/else ่กจ่พพๅผ
JavaScriptๅ Scala if/then/else ่ฏญๅฅ็ธไผผใ ๅจ Scala 2 ไธญๅฎไปฌๅ ไน็ธๅ๏ผไฝๅจ Scala 3 ไธญ๏ผ่ฑๆฌๅทไธๅๆฏๅฟ ้็๏ผๅฐฝ็ฎกๅฎไปฌไป็ถๅฏไปฅไฝฟ็จ๏ผใ
if
่ฏญๅฅ๏ผๅ่ก๏ผ
if (x == 1) { console.log(1); }
|
if x == 1 then println(x)
|
if
่ฏญๅฅ๏ผๅค่ก๏ผ
if (x == 1) {
|
if x == 1 then
|
if, else if, else:
if (x < 0) {
|
if x < 0 then
|
ไป if
่ฟๅๅผ๏ผ
JavaScript ไฝฟ็จไธๅ
่ฟ็ฎ็ฌฆ๏ผScala ๅๅพๅธธไธๆ ทไฝฟ็จๅฎ็ if
่กจ่พพๅผ๏ผ
let minVal = a < b ? a : b;
|
val minValue = if a < b then a else b
|
if
ไฝไธบๆนๆณไฝ๏ผ
Scala ๆนๆณๅพๅพๅพ็ญ๏ผๆจๅฏไปฅ่ฝปๆพๅฐไฝฟ็จ if
ไฝไธบๆนๆณไฝ๏ผ
function min(a, b) {
|
def min(a: Int, b: Int): Int =
|
ๅจ Scala 3 ไธญ๏ผๅฆๆๆจๆฟๆ๏ผๆจไป็ถๅฏไปฅไฝฟ็จโ่ฑๆฌๅทโๆ ทๅผใ ไพๅฆ๏ผๆจๅฏไปฅๅ่ฟๆ ท็ผๅ if/else-if/else ่กจ่พพๅผ๏ผ
if (i == 0) {
println(0)
} else if (i == 1) {
println(1)
} else {
println("other")
}
ๅพช็ฏ
JavaScript ๅ Scala ้ฝๆ while
ๅพช็ฏๅ for
ๅพช็ฏใ
Scala ๆพ็ปๆ do/while ๅพช็ฏ๏ผไฝๅฎไปฌๅทฒไป่ฏญ่จไธญๅ ้คใ
while
ๅพช็ฏ๏ผ
let i = 0;
|
var i = 0;
|
ๅฆๆไฝ ๆฟๆ๏ผScala ไปฃ็ ไนๅฏไปฅๅๆ่ฟๆ ท๏ผ
var i = 0
while (i < 3) {
println(i)
i += 1
}
ไปฅไธ็คบไพๅฑ็คบไบ JavaScript ๅ Scala ไธญ็โforโๅพช็ฏใ ไปไปฌๅ่ฎพๆจๅฏไปฅไฝฟ็จ่ฟไบ้ๅ๏ผ
// JavaScript
let nums = [1, 2, 3];
// Scala
val nums = List(1, 2, 3)
for
ๅพช็ฏ๏ผๅ่ก๏ผ
// newer syntax
|
// preferred
|
for
ๅพช็ฏ๏ผๅจๅพช็ฏไฝๅ
ๅค่ก
// preferred
|
// preferred
|
ๅจ for
ๅพช็ฏไธญๆๅคไธช็ๆๅจ
let str = "ab";
|
for
|
ๅธฆๅฎๅซ็็ๆๅจ
_ๅฎๅซ_ๆฏ for
่กจ่พพๅผไธญ็ if
่กจ่พพๅผ็ๅ็งฐใ
for (let i = 0; i < 10; i++) {
|
for
|
for
comprehension
for
comprehension ๆฏไธไธช for
ๅพช็ฏ๏ผๅฎไฝฟ็จ yield
่ฟๅ๏ผไบง็๏ผไธไธชๅผใ ๅฎไปฌ็ปๅธธๅจ Scala ไธญไฝฟ็จใ
N/A |
val list =
|
switch & match
JavaScript ๆ switch
่ฏญๅฅ๏ผScala ๆ match
่กจ่พพๅผใ
ๅฐฑๅ Scala ไธญ็ๆๆๅ
ถไปไธ่ฅฟไธๆ ท๏ผ่ฟไบ็กฎๅฎๆฏ_่กจ่พพๅผ_๏ผ่ฟๆๅณ็ๅฎไปฌ่ฟๅไธไธช็ปๆ๏ผ
val day = 1
// later in the code ...
val monthAsString = day match
case 1 => "January"
case 2 => "February"
case _ => "Other"
match
่กจ่พพๅผๅฏไปฅๅจๆฏไธช case
่ฏญๅฅไธญๅค็ๅคไธชๅน้
้กน๏ผ
val numAsString = i match
case 1 | 3 | 5 | 7 | 9 => "odd"
case 2 | 4 | 6 | 8 | 10 => "even"
case _ => "too big"
ๅฎไปฌไนๅฏไปฅ็จไบๆนๆณไฝ๏ผ
def isTruthy(a: Matchable) = a match
case 0 | "" => false
case _ => true
def isPerson(x: Matchable): Boolean = x match
case p: Person => true
case _ => false
match
่กจ่พพๅผๆ่ฎธๅคๅ
ถไปๆจกๅผๅน้
้้กนใ
้ๅ็ฑป
Scala ๆไธๅ็ ้ๅ็ฑป ๆฅๆปก่ถณไธๅ็้ๆฑใ
ๅธธ่ง็_ไธๅฏๅ_ๅบๅๆฏ๏ผ
List
Vector
ๅธธ่ง็_ๅฏๅ_ๅบๅๆฏ๏ผ
Array
ArrayBuffer
Scala ่ฟๆๅฏๅๅไธๅฏๅ็ Map ๅ Setใ
่ฟๆฏๅๅปบๅธธ่ง Scala ้ๅ็ฑปๅ็ๆนๅผ๏ผ
val strings = List("a", "b", "c")
val strings = Vector("a", "b", "c")
val strings = ArrayBuffer("a", "b", "c")
val set = Set("a", "b", "a") // result: Set("a", "b")
val map = Map(
"a" -> 1,
"b" -> 2,
"c" -> 3
)
้ๅไธ็ๆนๆณ
ไปฅไธ็คบไพๅฑ็คบไบไฝฟ็จ Scala ้ๅ็่ฎธๅคไธๅๆนๆณใ
ๅกซๅ ๅ่กจ๏ผ
// to, until
(1 to 5).toList // List(1, 2, 3, 4, 5)
(1 until 5).toList // List(1, 2, 3, 4)
(1 to 10 by 2).toList // List(1, 3, 5, 7, 9)
(1 until 10 by 2).toList // List(1, 3, 5, 7, 9)
(1 to 10).by(2).toList // List(1, 3, 5, 7, 9)
('d' to 'h').toList // List(d, e, f, g, h)
('d' until 'h').toList // List(d, e, f, g)
('a' to 'f').by(2).toList // List(a, c, e)
// range method
List.range(1, 3) // List(1, 2)
List.range(1, 6, 2) // List(1, 3, 5)
List.fill(3)("foo") // List(foo, foo, foo)
List.tabulate(3)(n => n * n) // List(0, 1, 4)
List.tabulate(4)(n => n * n) // List(0, 1, 4, 9)
ๅบๅไธ็ๅฝๆฐๅผๆนๆณ๏ผ
// these examples use a List, but theyโre the same with Vector
val a = List(10, 20, 30, 40, 10) // List(10, 20, 30, 40, 10)
a.contains(20) // true
a.distinct // List(10, 20, 30, 40)
a.drop(2) // List(30, 40, 10)
a.dropRight(2) // List(10, 20, 30)
a.dropWhile(_ < 25) // List(30, 40, 10)
a.filter(_ < 25) // List(10, 20, 10)
a.filter(_ > 100) // List()
a.find(_ > 20) // Some(30)
a.head // 10
a.headOption // Some(10)
a.init // List(10, 20, 30, 40)
a.last // 10
a.lastOption // Some(10)
a.slice(2,4) // List(30, 40)
a.tail // List(20, 30, 40, 10)
a.take(3) // List(10, 20, 30)
a.takeRight(2) // List(40, 10)
a.takeWhile(_ < 30) // List(10, 20)
// map, flatMap
val fruits = List("apple", "pear")
fruits.map(_.toUpperCase) // List(APPLE, PEAR)
fruits.flatMap(_.toUpperCase) // List(A, P, P, L, E, P, E, A, R)
val nums = List(10, 5, 8, 1, 7)
nums.sorted // List(1, 5, 7, 8, 10)
nums.sortWith(_ < _) // List(1, 5, 7, 8, 10)
nums.sortWith(_ > _) // List(10, 8, 7, 5, 1)
List(1,2,3).updated(0,10) // List(10, 2, 3)
List(2,4).union(List(1,3)) // List(2, 4, 1, 3)
// zip
val women = List("Wilma", "Betty") // List(Wilma, Betty)
val men = List("Fred", "Barney") // List(Fred, Barney)
val couples = women.zip(men) // List((Wilma,Fred), (Betty,Barney))
Scala ๆ_ๅพๅค_ๆดๅคๅฏไพๆจไฝฟ็จ็ๆนๆณใ ๆๆ่ฟไบๆนๆณ็ๅฅฝๅคๆฏ๏ผ
- ๆจไธๅฟ
็ผๅ่ชๅฎไน็
for
ๅพช็ฏๆฅ่งฃๅณ้ฎ้ข - ๅฝไฝ ้
่ฏปๅซไบบ็ไปฃ็ ๆถ๏ผไฝ ไธๅฟ
้
่ฏปไปไปฌ่ชๅฎไน็
for
ๅพช็ฏ๏ผ ไฝ ๅชไผๆพๅฐๅ่ฟๆ ท็ๅธธ็จๆนๆณ๏ผๅ ๆญคๆดๅฎนๆ้ ่ฏปๆฅ่ชไธๅ้กน็ฎ็ไปฃ็
ๅ ็ป
ๅฝๆจๆณๅฐๅคไธชๆฐๆฎ็ฑปๅๆพๅจๅไธไธชๅ่กจไธญๆถ๏ผJavaScript ๅ ่ฎธๆจ่ฟๆ ทๅ๏ผ
stuff = ["Joe", 42, 1.0];
ๅจ Scala ไธญไฝ ่ฟๆ ทๅ๏ผ
val a = ("eleven")
val b = ("eleven", 11)
val c = ("eleven", 11, 11.0)
val d = ("eleven", 11, 11.0, Person("Eleven"))
ๅจ Scala ไธญ๏ผ่ฟไบ็ฑปๅ็งฐไธบๅ
็ป๏ผๅฆๅพๆ็คบ๏ผๅฎไปฌๅฏไปฅๅ
ๅซไธไธชๆๅคไธชๅ
็ด ๏ผๅนถไธๅ
็ด ๅฏไปฅๅ
ทๆไธๅ็็ฑปๅใ
่ฎฟ้ฎๅฎไปฌ็ๅ
็ด ๅฐฑๅ่ฎฟ้ฎ List
ใVector
ๆ Array
็ๅ
็ด ไธๆ ท๏ผ
d(0) // "eleven"
d(1) // 11
ๆไธพ
JavaScript ๆฒกๆๆไธพ๏ผไฝไฝ ๅฏไปฅ่ฟๆ ทๅ๏ผ
let Color = {
RED: 1,
GREEN: 2,
BLUE: 3
};
Object.freeze(Color);
ๅจ Scala 3 ไธญ๏ผๆจๅฏไปฅไฝฟ็จๆไธพๅๅพๅคไบๆ ใ ๆจๅฏไปฅๅๅปบ่ฏฅไปฃ็ ็็ญๆไปฃ็ ๏ผ
enum Color:
case Red, Green, Blue
ไฝ ๅฏไปฅๅๅปบๅธฆๅๆฐ็ๆไธพ๏ผ
enum Color(val rgb: Int):
case Red extends Color(0xFF0000)
case Green extends Color(0x00FF00)
case Blue extends Color(0x0000FF)
ไฝ ไนๅฏไปฅๅๅปบ็จๆท่ชๅฎไน็ๆไธพๆๅ๏ผ
enum Planet(mass: Double, radius: Double):
case Mercury extends Planet(3.303e+23, 2.4397e6)
case Venus extends Planet(4.869e+24,6.0518e6)
case Earth extends Planet(5.976e+24,6.37814e6)
// more planets here ...
private final val G = 6.67300E-11
def surfaceGravity = G * mass / (radius * radius)
def surfaceWeight(otherMass: Double) = otherMass * surfaceGravity
Scala.js DOM ไปฃ็
Scala.js ๅ ่ฎธๆจ็ผๅ Scala ไปฃ็ ๏ผ่ฟไบไปฃ็ ็ผ่ฏไธบ JavaScript ไปฃ็ ๏ผ็ถๅๅฏไปฅๅจๆต่งๅจไธญไฝฟ็จใ ่ฏฅๆนๆณ็ฑปไผผไบ TypeScriptใReScript ๅๅ ถไป็ผ่ฏไธบ JavaScript ็่ฏญ่จใ
ๅ ๅซๅฟ ่ฆ็ๅบๅนถๅจ้กน็ฎไธญๅฏผๅ ฅๅฟ ่ฆ็ๅ ๅ๏ผ็ผๅ Scala.js ไปฃ็ ็่ตทๆฅไธ็ผๅ JavaScript ไปฃ็ ้ๅธธ็ธไผผ๏ผ
// show an alert dialog on a button click
jQuery("#hello-button").click{() =>
dom.window.alert("Hello, world")
}
// define a button and what should happen when itโs clicked
val btn = button(
"Click me",
onclick := { () =>
dom.window.alert("Hello, world")
})
// create two divs with css classes, an h2 element, and the button
val content =
div(cls := "foo",
div(cls := "bar",
h2("Hello"),
btn
)
)
// add the content to the DOM
val root = dom.document.getElementById("root")
root.innerHTML = ""
root.appendChild(content.render)
่ฏทๆณจๆ๏ผๅฐฝ็ฎก Scala ๆฏไธ็ง็ฑปๅๅฎๅ จ็่ฏญ่จ๏ผไฝๅจไธ้ข็ไปฃ็ ไธญๆฒกๆๅฃฐๆไปปไฝ็ฑปๅใ Scala ๅผบๅคง็็ฑปๅๆจๆญ่ฝๅ้ๅธธไฝฟ Scala ไปฃ็ ็่ตทๆฅๅๆฏๅจๆ็ฑปๅ็ใ ไฝๅฎๆฏ็ฑปๅๅฎๅ จ็๏ผๅ ๆญคๆจๅฏไปฅๅจๅผๅๅจๆ็ๆฉๆๆ่ท่ฎธๅค็ฑป้่ฏฏใ
ๅ ถไป Scala.js ่ตๆบ
Scala.js ็ฝ็ซไธบๅฏนไฝฟ็จ Scala.js ๆๅ ด่ถฃ็ JavaScript ๅผๅไบบๅๆไพไบๆๅฅฝ็ๆ็จ้ใ ไปฅไธๆฏไปไปฌ็ไธไบๅๅงๆ็จ๏ผ
- ๅบ็กๆ็จ๏ผๅๅปบ็ฌฌไธไธช Scala.js ้กน็ฎ๏ผ
- ้็จไบ JavaScript ๅผๅไบบๅ็ Scala.js
- ไป ES6 ๅฐ Scala๏ผๅบ็ก
- ไป ES6 ๅฐ Scala๏ผ้ๅ
- ไป ES6 ๅฐ Scala๏ผ้ซ็บง
Scala ็ฌๆ็ๆฆๅฟต
Scala ไธญ่ฟๆๅ ถไปไธไบๆฆๅฟต็ฎๅๅจ JavaScript ไธญๆฒกๆ็ญๆ็ๆฆๅฟต๏ผ
- ๅ ไนๆๆไธไธไธๆๆฝ่ฑก็ธๅ ณ็ไธ่ฅฟ
- ๆนๆณ็นๆง๏ผ
- ๅคไธชๅๆฐๅ่กจ
- ่ฐ็จๆนๆณๆถไฝฟ็จๅฝๅๅๆฐ
- ไฝฟ็จ trait ไฝไธบๆฅๅฃ
- ๆ ทไพ็ฑป
- ไผด็็ฑปๅๅฏน่ฑก
- ๅๅปบ่ชๅทฑ็ๆงๅถ็ปๆๅ DSL ็่ฝๅ
match
่กจ่พพๅผๅๆจกๅผๅน้ ็้ซ็บงๅ่ฝfor
comprehension- ไธญ็ผๆนๆณ
- ๅฎๅๅ ็ผ็จ
- ๆดๅค็ โฆ
Contributors to this page:
Contents
- ๅฏผ่จ
- Scala 3 ็นๆง
- ไธบไปไนๆฏ Scala 3 ๏ผ
- Scala ็ๅณ้
- Hello, World!
- The REPL
- ๅ้ๅๆฐๆฎ็ฑปๅ
- ๆงๅถ็ปๆ
- ้ขๅๅปบๆจก
- ๆนๆณ
- ๅคด็ญๅฝๆฐ
- ๅไพๅฏน่ฑก
- ้ๅ
- ไธไธๆๆฝ่ฑก
- ้กถๅฑๅฎไน
- ๆป็ป
- ็ฑปๅๅๆข
- ๅญ็ฌฆไธฒๆๅผ
- ๆงๅถ็ปๆ
- ้ขๅๅปบๆจก
- ๅทฅๅ ท
- OOP ้ขๅๅปบๆจก
- ๅฝๆฐๅผ้ขๅๅปบๆจก
- ๆนๆณ
- ๆนๆณ็นๆง
- main ๆนๆณ
- ๆป็ป
- ๅฝๆฐ
- ๅฟๅๅฝๆฐ
- ๅฝๆฐๅ้
- Eta ๆฉๅฑ
- ้ซ้ถๅฝๆฐ
- ่ชๅฎไน map ๅฝๆฐ
- ๅๅปบๅฏไปฅ่ฟๅๅฝๆฐ็ๆนๆณ
- ๆป็ป
- ๆๅ ๅๅฏผๅ ฅ
- Scala ้ๅ
- ้ๅ็ฑปๅ
- ้ๅๆนๆณ
- ๆป็ป
- ๅฝๆฐๅผ็ผ็จ
- ไปไนๆฏๅฝๆฐๅผ็ผ็จ๏ผ
- ไธๅฏๅๅผ
- ็บฏๅฝๆฐ
- ๅฝๆฐๆฏๅผ
- ๅฝๆฐๅผ้่ฏฏๅค็
- ๆป็ป
- ็ฑปๅๅ็ฑปๅ็ณป็ป
- ็ฑปๅๆจๆญ
- ๆณๅ
- ็ธไบค็ฑปๅ
- ่ๅ็ฑปๅ
- ไปฃๆฐๆฐๆฎ็ฑปๅ
- ๅๅ
- ไธ้ๆ็ฑปๅ
- ็ปๆๅ็ฑปๅ
- ไพ่ตๅฝๆฐ็ฑปๅ
- ๅ ถไป็ฑปๅ
- ไธไธๆๆฝ่ฑก
- ๆฉๅฑๆนๆณ
- Given ๅฎไพๅ Using ่ฏญๅฅ
- ไธไธๆ็ปๅฎ
- Given ๅฏผๅ ฅ
- ๅฎ็ฐ็ฑปๅ็ฑป
- ๅคๅ ็ธ็ญๆง
- ้ๅผ่ฝฌๆข
- ๆป็ป
- ๅนถๅ
- Scala ๅทฅๅ ท
- ไฝฟ็จ sbt ๆๅปบๅๆต่ฏ Scala ้กน็ฎ
- worksheet
- ไธ Java ไบคไบ
- ๅ Java ๅผๅ่ ไป็ปScala
- Scala for JavaScript Developers
- Scala for Python Developers
- ไธไธๆญฅๅปๅช