ๆฌ่ๆไพไบ Python ๅ Scala ็ผ็จ่ฏญ่จไน้ด็ๆฏ่พใ
ๅฎ้็จไบๆๅพ Python ๅนถๅธๆไบ่งฃ Scala ็็จๅบๅ๏ผ็นๅซๆฏ้่ฟๆฅ็ Python ่ฏญ่จ็นๆงไธ Scala ๆฏ่พ็็คบไพใ
ไป็ป
ๅจ่ฟๅ
ฅ็คบไพไนๅ๏ผ็ฌฌไธ้จๅๆไพไบไปฅไธ้จๅ็็ธๅฏน็ฎ็ญ็ไป็ปๅๆป็ปใ
่ฟไธค็ง่ฏญ่จ้ฆๅ
ๅจ้ซๅฑๆฌกไธ่ฟ่กๆฏ่พ๏ผ็ถๅๅจๆฅๅธธ็ผ็จๅฑๆฌกไธ่ฟ่กๆฏ่พใ
้ซๅฑๆฌก็ธไผผๆง
ๅจ้ซๅฑๆฌกไธ๏ผScala ไธ Python ๆ่ฟไบ็ธไผผไนๅค๏ผ
- ไธค่
้ฝๆฏ้ซ็บง็ผ็จ่ฏญ่จ๏ผๆจไธๅฟ
ๅ
ณๅฟๆ้ๅๆๅจๅ
ๅญ็ฎก็็ญไฝ็บงๆฆๅฟต
- ไธค่
้ฝๆไธไธช็ธๅฏน็ฎๅใ็ฎๆด็่ฏญๆณ
- ไธค่
้ฝๆฏๆๅฝๆฐๅผ็ผ็จ
- ไธค่
้ฝๆฏ้ขๅๅฏน่ฑก็็ผ็จ (OOP) ่ฏญ่จ
- ไธค่
้ฝๆๆจๅฏผ๏ผPython ๆๅ่กจๆจๅฏผ๏ผScala ๆ
for
ๆจๅฏผ
- ไธค็ง่ฏญ่จ้ฝๆฏๆ lambdas ๅ ้ซ้ถๅฝๆฐ
- ไธค่
้ฝๅฏไปฅไธ Apache Spark ไธ่ตท็จไบๅคงๆฐๆฎๅค็
- ไธค่
้ฝๆๅพๅคๅพๆฃ็ๅบ
้ซๅฑๆฌกๅทฎๅผ
ๅๆ ทๅจ้ซๅฑๆฌกไธ๏ผPython ๅ Scala ไน้ด็_ๅทฎๅผ_ๆฏ๏ผ
- Python ๆฏๅจๆ็ฑปๅ็๏ผScala ๆฏ้ๆ็ฑปๅ็
- ่ฝ็ถๅฎๆฏ้ๆ็ฑปๅ็๏ผไฝ Scala ็็ฑปๅๆจๆญ็ญ็นๆง่ฎฉๅฎๆ่งๅๆฏไธ้จๅจๆ่ฏญ่จ
- Python ่ขซ่งฃ้๏ผScala ไปฃ็ ่ขซ็ผ่ฏๆ .class ๆไปถ๏ผๅนถๅจ Java ่ๆๆบ (JVM) ไธ่ฟ่ก
- ้คไบๅจ JVM ไธ่ฟ่กไนๅค๏ผScala.js ้กน็ฎๅ
่ฎธๆจไฝฟ็จ Scala ไฝไธบ JavaScript ๆฟไปฃๅ
- Scala Native ้กน็ฎๅฏ่ฎฉๆจ็ผๅโ็ณป็ปโ็บงไปฃ็ ๏ผๅนถ็ผ่ฏไธบๆฌๆบๅฏๆง่กๆไปถ
- Scala ไธญ็ไธๅ้ฝๆฏไธไธช_่กจ่พพๅผ_๏ผๅ
if
่ฏญๅฅใfor
ๅพช็ฏใmatch
่กจ่พพๅผ๏ผ็่ณ try
/catch
่กจ่พพๅผ้ฝๆ่ฟๅๅผ
- Scala ไน ๆฏ้ป่ฎคไธๅๆง๏ผ้ผๅฑๆจไฝฟ็จไธๅฏๅๅ้ๅไธๅฏๅ้ๅ
- Scala ๅฏนๅนถๅๅๅนถ่ก็ผ็จๆๅพๅฅฝ็ๆฏๆ
็ผ็จๅฑๆฌก็ธไผผๆง
ๆฌ่ไป็ปๆจๅจๆฅๅธธ็ผๅไปฃ็ ๆถไผ็ๅฐ Python ๅ Scala ไน้ด็็ธไผผไนๅค๏ผ
- Scala ็็ฑปๅๆจๆญๅธธๅธธ่ฎฉไบบๆ่งๅๆฏไธ็งๅจๆ็ฑปๅ่ฏญ่จ
- ไธค็ง่ฏญ่จ้ฝไธไฝฟ็จๅๅทๆฅ็ปๆ่กจ่พพๅผ
- ไธค็ง่ฏญ่จ้ฝๆฏๆไฝฟ็จ้่ฆ็็ผฉ่ฟ่ไธๆฏๅคงๆฌๅทๅๅๆฌๅท
- ๅฎไนๆนๆณ็่ฏญๆณ็ฑปไผผ
- ไธค่
้ฝๆๅ่กจใๅญๅ
ธ๏ผๆ ๅฐ๏ผใ้ๅๅๅ
็ป
- ไธค่
้ฝๆๆ ๅฐๅ่ฟๆปค็ๆจๅฏผ
- ไฝฟ็จ Scala 3 ็้กถ็บงๅฎไน๏ผๆจๅฏไปฅๅฐๆนๆณใๅญๆฎตๅๅ
ถไปๅฎไนๆพๅจไปปไฝๅฐๆน
- ไธไธชๅบๅซๆฏ Python ็่ณๅฏไปฅๅจไธๅฃฐๆๅไธชๆนๆณ็ๆ
ๅตไธ่ฟ่ก๏ผ่ Scala 3 ไธ่ฝๅจ้กถๅฑๅ_ๆๆไบ_๏ผไพๅฆ๏ผๅฏๅจ Scala ๅบ็จ็จๅบ้่ฆไธไธช main ๆนๆณ (
@main def
)
็ผ็จๅฑๆฌกๅทฎๅผ
ๅๆ ทๅจ็ผ็จ็บงๅซ๏ผ่ฟไบๆฏๆจๅจ็ผๅไปฃ็ ๆถๆฏๅคฉ้ฝไผ็ๅฐ็ไธไบๅทฎๅผ๏ผ
- ๅจ Scala ไธญ็ผ็จๆ่ง้ๅธธไธ่ด๏ผ
val
ๅ var
ๅญๆฎต็จไบๅฎไนๅญๆฎตๅๅๆฐ
- ๅ่กจใๆ ๅฐใ้ๅๅๅ
็ป้ฝไปฅ็ฑปไผผๆนๅผๅๅปบๅ่ฎฟ้ฎ๏ผไพๅฆ๏ผๆฌๅท็จไบๅๅปบๆๆ็ฑปๅโ
List(1,2,3)
, Set(1,2,3)
, Map(1->"one")
โๅฐฑๅๅๅปบไปปไฝๅ
ถไป Scala ็ฑป
- ้ๅ็ฑป ้ๅธธๅ
ทๆๅคง้จๅ็ธๅ็้ซ้ถๅฝๆฐ
- ๆจกๅผๅน้
ๅจๆดไธช่ฏญ่จไธญไธ่ดไฝฟ็จ
- ็จไบๅฎไนไผ ้็ปๆนๆณ็ๅฝๆฐ็่ฏญๆณไธ็จไบๅฎไนๅฟๅๅฝๆฐ็่ฏญๆณ็ธๅ
- Scala ๅ้ๅๅๆฐไฝฟ็จ
val
๏ผไธๅฏๅ๏ผๆ var
๏ผๅฏๅ๏ผๅ
ณ้ฎๅญๅฎไน
- Scala ไน ๆฏ็จๆณๆดๅๆฌขไธๅฏๅ็ๆฐๆฎ็ปๆ
- Scala ้่ฟ IntelliJ IDEA ๅ Microsoft VS Code ๆไพไบๆๅฅฝ็ IDE ๆฏๆ
- ๆณจ้๏ผPython ไฝฟ็จ
#
่กจ็คบๆณจ้๏ผ Scala ไฝฟ็จ CใC++ ๅ Java ๆ ทๅผ๏ผ//
ใ/*...*/
ๅ /**...*/
- ๅฝๅ็บฆๅฎ๏ผPython ๆ ๅๆฏไฝฟ็จไธๅ็บฟ๏ผไพๅฆ
my_list
๏ผ Scala ไฝฟ็จ myList
- Scala ๆฏ้ๆ็ฑปๅ็๏ผๅ ๆญคๆจๅฏไปฅๅฃฐๆๆนๆณๅๆฐใๆนๆณ่ฟๅๅผๅๅ
ถไปๅฐๆน็็ฑปๅ
- ๆจกๅผๅน้
ๅ
match
่กจ่พพๅผๅจ Scala ไธญ่ขซๅนฟๆณไฝฟ็จ๏ผๅนถไธไผๆนๅไฝ ็ผๅไปฃ็ ็ๆนๅผ๏ผ
- Scala ไธญๅคง้ไฝฟ็จ trait๏ผๆฅๅฃๅๆฝ่ฑก็ฑปๅจ Python ไธญไฝฟ็จ่พๅฐ
- Scala ็ ไธไธๆๆฝ่ฑก ๅ _ๆฏ่ฏญๆจๅฏผ_ๆไพไบไธ็ณปๅไธๅ็็นๆง๏ผ
- [ๆฉๅฑๆนๆณ][extension-method]่ฎฉๆจไฝฟ็จๆธ
ๆฐ็่ฏญๆณ่ฝปๆพๅฐๅ็ฑปๆทปๅ ๆฐๅ่ฝ
- ๅคๅ
็ญๅผ ่ฎฉๆจ้ๅถ็ธ็ญๆฏ่พโๅจ็ผ่ฏๆถโโๅชๆ้ฃไบๆๆไน็ๆฏ่พ
- Scala ๆฅๆๆๅ
่ฟ็ๅผๆบๅฝๆฐๅผ็ผ็จๅบ๏ผๅ่ง โAwesome Scalaโ ๅ่กจ๏ผ
- ๅๅฉๅฏน่ฑกใๆๅ็งฐๅๆฐใไธญ็ผ่กจ็คบๆณใๅฏ้ๆฌๅทใๆฉๅฑๆนๆณใ้ซ้ถๅฝๆฐ็ญๅ่ฝ๏ผๆจๅฏไปฅๅๅปบ่ชๅทฑ็โๆงๅถ็ปๆโๅ DSL
- Scala ไปฃ็ ๅฏไปฅๅจ JVM ไธญ่ฟ่ก๏ผ็่ณๅฏไปฅ็ผ่ฏไธบๅ็ไปฃ็ ๏ผไฝฟ็จ Scala Native ๅ GraalVM .org)) ๅฎ็ฐ้ซๆง่ฝ
- ่ฎธๅคๅ
ถไปๅฅฝไธ่ฅฟ๏ผๆ ทไพ็ฑปใไผด็็ฑปๅๅฏน่ฑกใๅฎใ่ๅ ๅ ไบค้ ็ฑปๅใ้กถ็บงๅฎไนใๆฐๅญๅญ้ข้ใๅคๅๆฐๅ่กจๅๆดๅค็
็นๆงๆฏ่พ็คบไพ
้ดไบ่ฏฅไป็ป๏ผไปฅไธ้จๅๆไพไบ Python ๅ Scala ็ผ็จ่ฏญ่จๅ่ฝ็ๅนถๆๆฏ่พใ
ๆณจ้
Python ไฝฟ็จ #
่กจ็คบๆณจ้๏ผ่ Scala ็ๆณจ้่ฏญๆณไธ CใC++ ๅ Java ็ญ่ฏญ่จ็ธๅ๏ผ
# a comment
|
// a comment
/* ... */
/** ... */
|
ๅ้่ตๅผ
่ฟไบไพๅญๆผ็คบไบๅฆไฝๅจ Python ๅ Scala ไธญๅๅปบๅ้ใ
ๅๅปบๆดๆฐๅๅญ็ฌฆไธฒๅ้๏ผ
x = 1
x = "Hi"
y = """foo
bar
baz"""
|
val x = 1
val x = "Hi"
val y = """foo
bar
baz"""
|
ๅ่กจ๏ผ
x = [1,2,3]
|
val x = List(1,2,3)
|
ๅญๅ
ธ/ๆ ๅฐ๏ผ
x = {
"Toy Story": 8.3,
"Forrest Gump": 8.8,
"Cloud Atlas": 7.4
}
|
val x = Map(
"Toy Story" -> 8.3,
"Forrest Gump" -> 8.8,
"Cloud Atlas" -> 7.4
)
|
้ๅ๏ผ
x = {1,2,3}
|
val x = Set(1,2,3)
|
ๅ
็ป๏ผ
x = (11, "Eleven")
|
val x = (11, "Eleven")
|
ๅฆๆ Scala ๅญๆฎตๆฏๅฏๅ็๏ผ่ฏทไฝฟ็จ var
่ไธๆฏ val
ๆฅๅฎไนๅ้๏ผ
็ถ่๏ผScala ไธญ็็ป้ชๆณๅๆฏๅง็ปไฝฟ็จ val
๏ผ้ค้ๅ้็กฎๅฎ้่ฆ่ขซๆนๅใ
OOP ้ฃๆ ผ็็ฑปๅๆนๆณ
ๆฌ่ๆฏ่พไบไธ OOP ้ฃๆ ผ็็ฑปๅๆนๆณ็ธๅ
ณ็็นๆงใ
OOP ้ฃๆ ผ็ฑป๏ผไธปๆ้ ๅฝๆฐ๏ผ
class Person(object):
def __init__(self, name):
self.name = name
def speak(self):
print(f'Hello, my name is {self.name}')
|
class Person (var name: String):
def speak() = println(s"Hello, my name is $name")
|
ๅๅปบๅไฝฟ็จๅฎไพ๏ผ
p = Person("John")
p.name # John
p.name = 'Fred'
p.name # Fred
p.speak()
|
val p = Person("John")
p.name // John
p.name = "Fred"
p.name // Fred
p.speak()
|
ๅ่กๆนๆณ๏ผ
def add(a, b): return a + b
|
def add(a: Int, b: Int): Int = a + b
|
ๅค่กๆนๆณ๏ผ
def walkThenRun():
print('walk')
print('run')
|
def walkThenRun() =
println("walk")
println("run")
|
ๆฅๅฃ๏ผtraits๏ผๅ็ปงๆฟ
ๅฆๆๆจ็ๆ Java 8 ๅๆดๆฐ็ๆฌ๏ผScala trait ็ฑปไผผไบ้ฃไบ Java ๆฅๅฃใ
Traits ๅจ Scala ไธญไธ็ดไฝฟ็จ๏ผ่ Python ๆฅๅฃๅๆฝ่ฑก็ฑป็ไฝฟ็จ้ข็่ฆไฝๅพๅคใ
ๅ ๆญค๏ผไธๅ
ถ่ฏๅพๆฏ่พไธค่
๏ผไธๅฆ็จ่ฟไธชไพๅญๆฅๅฑ็คบๅฆไฝไฝฟ็จ Scala traitๆฅๆๅปบไธไธชๆจกๆๆฐๅญฆ้ฎ้ข็ๅฐ่งฃๅณๆนๆก๏ผ
trait Adder:
def add(a: Int, b: Int) = a + b
trait Multiplier:
def multiply(a: Int, b: Int) = a * b
// create a class from the traits
class SimpleMath extends Adder, Multiplier
val sm = new SimpleMath
sm.add(1,1) // 2
sm.multiply(2,2) // 4
่ฟๆ่ฎธๅคๅ
ถไปๆนๆณๅฏไปฅๅฐ trait ไธ็ฑปๅๅฏน่ฑกไธ่ตทไฝฟ็จ๏ผไฝ่ฟ่ฎฉๆจไบ่งฃๅฆไฝไฝฟ็จๅฎไปฌๅฐๆฆๅฟต็ป็ปๆ่กไธบ็้ป่พ็ป๏ผ็ถๅๆ นๆฎ้่ฆๅฐๅฎไปฌๅๅนถไปฅๅๅปบไธไธชๅฎๆด็่งฃๅณๆนๆกใ
ๆงๅถ็ปๆ
ๆฌ่ๆฏ่พ Python ๅ Scala ไธญ็ๆงๅถ็ปๆใ
ไธค็ง่ฏญ่จ้ฝๆ็ฑปไผผ if
/else
ใwhile
ใfor
ๅพช็ฏๅ try
็็ปๆใ
Scala ไนๆ match
่กจ่พพๅผใ
if
่ฏญๅฅ๏ผๅ่ก๏ผ
if x == 1: print(x)
|
if x == 1 then println(x)
|
if
่ฏญๅฅ๏ผๅค่ก๏ผ
if x == 1:
print("x is 1, as you can see:")
print(x)
|
if x == 1 then
println("x is 1, as you can see:")
println(x)
|
if, else if, else:
if x < 0:
print("negative")
elif x == 0:
print("zero")
else:
print("positive")
|
if x < 0 then
println("negative")
else if x == 0 then
println("zero")
else
println("positive")
|
ไป if
่ฟๅๅผ๏ผ
min_val = a if a < b else b
|
val minValue = if a < b then a else b
|
if
ไฝไธบๆนๆณไฝ๏ผ
def min(a, b):
return a if a < b else b
|
def min(a: Int, b: Int): Int =
if a < b then a else b
|
while
ๅพช็ฏ๏ผ
i = 1
while i < 3:
print(i)
i += 1
|
var i = 1
while i < 3 do
println(i)
i += 1
|
ๆ่ๅด็ for
ๅพช็ฏ๏ผ
for i in range(0,3):
print(i)
|
// preferred
for i <- 0 until 3 do println(i)
// also available
for (i <- 0 until 3) println(i)
// multiline syntax
for
i <- 0 until 3
do
println(i)
|
ๅ่กจ็ for
ๅพช็ฏ๏ผ
for i in ints: print(i)
for i in ints:
print(i)
|
for i <- ints do println(i)
|
for
ๅพช็ฏ๏ผๅค่ก๏ผ
for i in ints:
x = i * 2
print(f"i = {i}, x = {x}")
|
for
i <- ints
do
val x = i * 2
println(s"i = $i, x = $x")
|
ๅคโ่ๅดโ็ๆๅจ๏ผ
for i in range(1,3):
for j in range(4,6):
for k in range(1,10,3):
print(f"i = {i}, j = {j}, k = {k}")
|
for
i <- 1 to 2
j <- 4 to 5
k <- 1 until 10 by 3
do
println(s"i = $i, j = $j, k = $k")
|
ๅธฆๅฎๅซ๏ผif
่กจ่พพๅผ๏ผ็็ๆๅจ๏ผ
for i in range(1,11):
if i % 2 == 0:
if i < 5:
print(i)
|
for
i <- 1 to 10
if i % 2 == 0
if i < 5
do
println(i)
|
ๆฏ่กๆๅคไธช if
ๆกไปถ๏ผ
for i in range(1,11):
if i % 2 == 0 and i < 5:
print(i)
|
for
i <- 1 to 10
if i % 2 == 0 && i < 5
do
println(i)
|
ๆจๅฏผ๏ผ
xs = [i * 10 for i in range(1, 4)]
# xs: [10,20,30]
|
val xs = for i <- 1 to 3 yield i * 10
// xs: Vector(10, 20, 30)
|
match
่กจ่พพๅผ๏ผ
# From 3.10, Python supports structural pattern matching
# You can also use dictionaries for basic โswitchโ functionality
match month:
case 1:
monthAsString = "January"
case 2:
monthAsString = "February"
case _:
monthAsString = "Other"
|
val monthAsString = month match
case 1 => "January"
case 2 => "February"
_ => "Other"
|
switch/match:
# Only from Python 3.10
match i:
case 1 | 3 | 5 | 7 | 9:
numAsString = "odd"
case 2 | 4 | 6 | 8 | 10:
numAsString = "even"
case _:
numAsString = "too big"
|
val numAsString = i match
case 1 | 3 | 5 | 7 | 9 => "odd"
case 2 | 4 | 6 | 8 | 10 => "even"
case _ => "too big"
|
try, catch, finally:
try:
print(a)
except NameError:
print("NameError")
except:
print("Other")
finally:
print("Finally")
|
try
writeTextToFile(text)
catch
case ioe: IOException =>
println(ioe.getMessage)
case fnf: FileNotFoundException =>
println(fnf.getMessage)
finally
println("Finally")
|
ๅน้
่กจ่พพๅผๅๆจกๅผๅน้
ๆฏ Scala ็ผ็จไฝ้ช็้่ฆ็ปๆ้จๅ๏ผไฝ่ฟ้ๅชๅฑ็คบไบๅ ไธช match
่กจ่พพๅผๅ่ฝใ ๆๅ
ณๆดๅค็คบไพ๏ผ่ฏทๅ่ง ๆงๅถ็ปๆ ้กต้ขใ
้ๅ็ฑป
ๆฌ่ๆฏ่พ Python ๅ Scala ไธญๅฏ็จ็ ้ๅ็ฑป๏ผๅ
ๆฌๅ่กจใๅญๅ
ธ/ๆ ๅฐใ้ๅๅๅ
็ปใ
ๅ่กจ
Python ๆๅฎ็ๅ่กจ๏ผScala ๆๅ ไธชไธๅ็ไธ้จ็ๅฏๅๅไธๅฏๅๅบๅ็ฑป๏ผๅ
ทไฝๅๅณไบๆจ็้่ฆใ
ๅ ไธบ Python ๅ่กจๆฏๅฏๅ็๏ผๆไปฅๅฎๆ็ดๆฅๅฐไธ Scala ็ ArrayBuffer
่ฟ่กๆฏ่พใ
Python ๅ่กจ & Scalaๅบๅ๏ผ
Match expressions and pattern matching are a big part of the Scala programming experience, but only a few match
expression features are shown here. See the Control Structures page for many more examples.
Collections classes
This section compares the collections classes that are available in Python and Scala, including lists, dictionaries/maps, sets, and tuples.
Lists
Where Python has its list, Scala has several different specialized mutable and immutable sequence classes, depending on your needs.
Because the Python list is mutable, it most directly compares to Scalaโs ArrayBuffer
.
Python list & Scala sequences:
a = [1,2,3]
|
// use different sequence classes
// as needed
val a = List(1,2,3)
val a = Vector(1,2,3)
val a = ArrayBuffer(1,2,3)
|
่ทๅๅ่กจๅ
็ด ๏ผ
a[0] a[1]
|
a(0) a(1) // just like all other method calls
|
ๆดๆฐๅ่กจๅ
็ด ๏ผ
a[0] = 10
a[1] = 20
|
// ArrayBuffer is mutable
a(0) = 10
a(1) = 20
|
ๅๅนถไธคไธชๅ่กจ๏ผ
้ๅๅ่กจ๏ผ
for i in ints: print(i)
for i in ints:
print(i)
|
// preferred
for i <- ints do println(i)
// also available
for (i <- ints) println(i)
|
Scala ็ไธป่ฆๅบๅ็ฑปๆฏ List
ใVector
ๅ ArrayBuffer
ใ
List
ๅ Vector
ๆฏๅฝไฝ ๆณ่ฆไธไธชไธๅฏๅๅบๅๆถไฝฟ็จ็ไธป่ฆ็ฑป๏ผ่ ArrayBuffer
ๆฏๅฝไฝ ๆณ่ฆไธไธชๅฏๅๅบๅๆถไฝฟ็จ็ไธป่ฆ็ฑปใ
๏ผScala ไธญ็โ็ผๅฒๅบโๆฏไธไธชๅฏไปฅๅข้ฟๅ็ผฉๅฐ็ๅบๅใ๏ผ
ๅญๅ
ธ/ๆ ๅฐ
Python ๅญๅ
ธๅฐฑๅ_ๅฏๅ็_ Scala Map
็ฑปใ
ไฝๆฏ๏ผ้ป่ฎค็ Scala ๆ ๅฐๆฏ_ไธๅฏๅ็_๏ผๅนถไธๆ่ฎธๅค่ฝฌๆขๆนๆณๅฏไปฅ่ฎฉๆจ่ฝปๆพๅๅปบๆฐๆ ๅฐใ
ๅญๅ
ธ/ๆ ๅฐ ๅๅปบ๏ผ
my_dict = {
'a': 1,
'b': 2,
'c': 3
}
|
val myMap = Map(
"a" -> 1,
"b" -> 2,
"c" -> 3
)
|
่ทๅๅญๅ
ธ/ๆ ๅฐๅ
็ด ๏ผ
my_dict['a'] # 1
|
myMap("a") // 1
|
ๅธฆ for
ๅพช็ฏ็ๅญๅ
ธ/ๆ ๅฐ๏ผ
for key, value in my_dict.items():
print(key)
print(value)
|
for (key,value) <- myMap do
println(key)
println(value)
|
Scala ๆๅ
ถไปไธ้จ็ Map
็ฑปๆฅๆปก่ถณไธๅ็้ๆฑใ
้ๅ
Python ้ๅ็ฑปไผผไบ_ๅฏๅ็_ Scala Set
็ฑปใ
้ๅๅๅปบ๏ผ
set = {"a", "b", "c"}
|
val set = Set(1,2,3)
|
้ๅคๅ
็ด ๏ผ
set = {1,2,1}
# set: {1,2}
|
val set = Set(1,2,1)
// set: Set(1,2)
|
Scala ๆๅ
ถไปไธ้จ็ Set
็ฑปๆฅๆปก่ถณไธๅ็้ๆฑใ
ๅ
็ป
Python ๅ Scala ๅ
็ปไนๅพ็ธไผผใ
ๅ
็ปๅๅปบ๏ผ
t = (11, 11.0, "Eleven")
|
val t = (11, 11.0, "Eleven")
|
่ทๅๅ
็ปๅ
็ด ๏ผ
t[0] # 11
t[1] # 11.0
|
t(0) // 11
t(1) // 11.0
|
้ๅ็ฑปไธ็ๆนๆณ
Python ๅ Scala ๆๅ ไธช็ธๅ็ๅธธ็จๅฝๆฐๆนๆณๅฏไพๅฎไปฌไฝฟ็จ๏ผ
ๅฆๆๆจไน ๆฏไบๅจ Python ไธญๅฐ่ฟไบๆนๆณไธ lambda ่กจ่พพๅผไธ่ตทไฝฟ็จ๏ผๆจไผๅ็ฐ Scala ๅจๅ
ถ้ๅ็ฑปไธญไฝฟ็จไบ็ฑปไผผ็ๆนๆณใ
ไธบไบๆผ็คบๆญคๅ่ฝ๏ผ่ฟ้ๆไธคไธช็คบไพๅ่กจ๏ผ
numbers = (1,2,3) // python
val numbers = List(1,2,3) // scala
ไธ่กจไธญไฝฟ็จไบ่ฟไบๅ่กจ๏ผๆพ็คบไบๅฆไฝๅฏนๅ
ถๅบ็จๆ ๅฐๅ่ฟๆปค็ฎๆณใ
ๆ ๅฐไธๆจๅฏผ๏ผ
x = [i * 10 for i in numbers]
|
val x = for i <- numbers yield i * 10
|
ๆๆจๅฏผ็่ฟๆปค๏ผ
evens = [i for i in numbers if i % 2 == 0]
|
val evens = numbers.filter(_ % 2 == 0)
// or
val evens = for i <- numbers if i % 2 == 0 yield i
|
ๆ ๅฐ & ๆๆจๅฏผ็่ฟๆปค๏ผ
x = [i * 10 for i in numbers if i % 2 == 0]
|
val x = numbers.filter(_ % 2 == 0).map(_ * 10)
// or
val x = for i <- numbers if i % 2 == 0 yield i * 10
|
ๆ ๅฐ๏ผ
x = map(lambda x: x * 10, numbers)
|
val x = numbers.map(_ * 10)
|
่ฟๆปค๏ผ
f = lambda x: x > 1
x = filter(f, numbers)
|
val x = numbers.filter(_ > 1)
|
Scala ้ๅๆนๆณ๏ผ
Scala ้ๅ็ฑปๆ่ถ
่ฟ 100 ็งๅ่ฝๆนๆณๆฅ็ฎๅๆจ็ไปฃ็ ใ
้คไบ map
ใfilter
ๅ reduce
๏ผไธ้ขๅๅบไบๅ
ถไปๅธธ็จ็ๆนๆณใ
ๅจ่ฟไบๆนๆณ็คบไพไธญ๏ผ
c
ๆ็ๆฏไธไธช้ๅ
p
ๆฏ่ฐ่ฏ
f
ๆฏไธไธชๅฝๆฐใๅฟๅๅฝๆฐๆๆนๆณ
n
ๆ็ๆฏไธไธชๆดๆฐๅผ
ไปฅไธๆฏไธไบๅฏ็จ็่ฟๆปคๆนๆณ๏ผ
ๆนๆณ |
่ฏดๆ |
c1.diff(c2) |
่ฟๅ c1 ๅ c2 ไธญๅ
็ด ็ๅทฎๅผใ |
c.distinct |
่ฟๅ c ไธญ็ๅฏไธๅ
็ด ใ |
c.drop(n) |
่ฟๅ้ๅไธญ้คๅ n ไธชๅ
็ด ไนๅค็ๆๆๅ
็ด ใ |
c.filter(p) |
่ฟๅ้ๅไธญ่ฐ่ฏไธบ true ็ๆๆๅ
็ด ใ |
c.head |
่ฟๅ้ๅ็็ฌฌไธไธชๅ
็ด ใ ๏ผๅฆๆ้ๅไธบ็ฉบ๏ผๅๆๅบ NoSuchElementException ใ๏ผ |
c.tail |
่ฟๅ้ๅไธญ้ค็ฌฌไธไธชๅ
็ด ไนๅค็ๆๆๅ
็ด ใ ๏ผๅฆๆ้ๅไธบ็ฉบ๏ผๅๆๅบ UnsupportedOperationException ใ๏ผ |
c.take(n) |
่ฟๅ้ๅ c ็ๅ n ไธชๅ
็ด ใ |
ไปฅไธๆฏไธไบ่ฝฌๆขๆนๆณ๏ผ
ๆนๆณ |
่ฏดๆ |
c.flatten |
ๅฐ้ๅ็้ๅ๏ผไพๅฆๅ่กจๅ่กจ๏ผ่ฝฌๆขไธบๅไธช้ๅ๏ผๅไธชๅ่กจ๏ผใ |
c.flatMap(f) |
้่ฟๅฐ f ๅบ็จไบ้ๅ c ็ๆๆๅ
็ด ๏ผๅฆ map ๏ผ่ฟๅไธไธชๆฐ้ๅ๏ผ็ถๅๅฐ็ปๆ้ๅ็ๅ
็ด ๅฑๅนณใ |
c.map(f) |
้่ฟๅฐ f ๅบ็จไบ้ๅ c ็ๆๆๅ
็ด ๆฅๅๅปบไธไธชๆฐ้ๅใ |
c.reduce(f) |
ๅฐ reduction ๅฝๆฐ f ๅบ็จไบ c ไธญ็่ฟ็ปญๅ
็ด ไปฅไบง็ๅไธชๅผใ |
c.sortWith(f) |
่ฟๅ็ฑๆฏ่พๅฝๆฐ f ๆๅบ็ c ็ๆฌใ |
ไธไบๅธธ่ง็ๅ็ปๆนๆณ๏ผ
ๆนๆณ |
่ฏดๆ |
c.groupBy(f) |
ๆ นๆฎ f ๅฐ้ๅๅๅไธบ้ๅ็ Map ใ |
c.partition(p) |
ๆ นๆฎ่ฐ่ฏ p ่ฟๅไธคไธช้ๅใ |
c.span(p) |
่ฟๅไธคไธช้ๅ็้ๅ๏ผ็ฌฌไธไธช็ฑ c.takeWhile(p) ๅๅปบ๏ผ็ฌฌไบไธช็ฑ c.dropWhile(p) ๅๅปบใ |
c.splitAt(n) |
้่ฟๅจๅ
็ด n ๅคๆๅ้ๅ c ๆฅ่ฟๅไธคไธช้ๅ็้ๅใ |
ไธไบไฟกๆฏๅๆฐๅญฆๆนๆณ๏ผ
ๆนๆณ |
่ฏดๆ |
c1.containsSlice(c2) |
ๅฆๆ c1 ๅ
ๅซๅบๅ c2 ๏ผๅ่ฟๅ true ใ |
c.count(p) |
่ฎก็ฎ c ไธญๅ
็ด ็ๆฐ้๏ผๅ
ถไธญ p ไธบ true ใ |
c.distinct |
่ฟๅ c ไธญ็ไธ้ๅค็ๅ
็ด ใ |
c.exists(p) |
ๅฆๆ้ๅไธญไปปไฝๅ
็ด ็ p ไธบ true ๏ผๅ่ฟๅ true ใ |
c.find(p) |
่ฟๅๅน้
p ็็ฌฌไธไธชๅ
็ด ใ่ฏฅๅ
็ด ไปฅ Option[A] ็ๅฝขๅผ่ฟๅใ |
c.min |
่ฟๅ้ๅไธญ็ๆๅฐๅ
็ด ใ ๏ผๅฏไปฅๆๅบ_java.lang.UnsupportedOperationException_ใ๏ผ |
c.max |
่ฟๅ้ๅไธญ็ๆๅคงๅ
็ด ใ ๏ผๅฏไปฅๆๅบ_java.lang.UnsupportedOperationException_ใ๏ผ |
c.slice(from, to) |
่ฟๅไปๅ
็ด from ๅผๅงๅฐๅ
็ด to ็ปๆ็ๅ
็ด ้ด้ใ |
c.sum |
่ฟๅ้ๅไธญๆๆๅ
็ด ็ๆปๅใ ๏ผ้่ฆไธบ้ๅไธญ็ๅ
็ด ๅฎไน Ordering ใ๏ผ |
ไปฅไธๆฏไธไบ็คบไพ๏ผๅฑ็คบไบ่ฟไบๆนๆณๅฆไฝๅจๅ่กจไธๅทฅไฝ๏ผ
val a = List(10, 20, 30, 40, 10) // List(10, 20, 30, 40, 10)
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.intersect(List(19,20,21)) // List(20)
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)
่ฟไบๆนๆณๅฑ็คบไบ Scala ไธญ็ไธไธชๅธธ่งๆจกๅผ๏ผๅฏน่ฑกไธๅฏ็จ็ๅฝๆฐๅผๆนๆณใ
่ฟไบๆนๆณ้ฝไธไผๆนๅๅๅงๅ่กจโaโ๏ผ ็ธๅ๏ผๅฎไปฌ้ฝ่ฟๅ็ๆฐๆฎๅจๆณจ้ๅๆพ็คบใ
่ฟๆๆดๅคๅฏ็จ็ๆนๆณ๏ผไฝๅธๆ่ฟไบๆ่ฟฐๅ็คบไพ่ฝ่ฎฉๆจไฝ้ชๅฐ้ขๅปบ้ๅๆนๆณ็ๅผบๅคงๅ่ฝใ
ๆไธพ
ๆฌ่ๆฏ่พ Python ๅ Scala 3 ไธญ็ๆไธพใ
ๅๅปบๆไธพ๏ผ
from enum import Enum, auto
class Color(Enum):
RED = auto()
GREEN = auto()
BLUE = auto()
|
enum Color:
case Red, Green, Blue
|
ๅผๅๆฏ่พ๏ผ
Color.RED == Color.BLUE # False
|
Color.Red == Color.Blue // false
|
ๅๆฐๅๆไธพ๏ผ
N/A
|
enum Color(val rgb: Int):
case Red extends Color(0xFF0000)
case Green extends Color(0x00FF00)
case Blue extends Color(0x0000FF)
|
็จๆทๅฎไนๆไธพๆๅ๏ผ
N/A
|
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 ...
// fields and methods
private final val G = 6.67300E-11
def surfaceGravity = G * mass /
(radius * radius)
def surfaceWeight(otherMass: Double)
= otherMass * surfaceGravity
|
Scala ็ฌๆ็ๆฆๅฟต
Scala ไธญ็ๆไบๆฆๅฟต็ฎๅๅจ Python ไธญๆฒกๆ็ญๆ็ๅ่ฝใ
่ฏท็นๅปไปฅไธ้พๆฅไบ่งฃๆดๅค่ฏฆๆ
๏ผ
- ๅคงๅคๆฐไธไธไธๆๆฝ่ฑก็ธๅ
ณ็ๆฆๅฟต๏ผๅฆๆฉๅฑๆนๆณใ็ฑปๅ็ฑปใ้ๅผๅผ
- Scala ๅ
่ฎธๅคๅๆฐๅ่กจ๏ผไป่ๅฎ็ฐ้จๅๅบ็จๅฝๆฐ็ญ็นๆง๏ผไปฅๅๅๅปบ่ชๅทฑ็ DSL ็่ฝๅ
- ๆ ทไพ็ฑป๏ผๅฏนไบๅฝๆฐๅผ็ผ็จๅๆจกๅผๅน้
้ๅธธๆ็จ
- ๅๅปบ่ชๅทฑ็ๆงๅถ็ปๆๅ DSL ็่ฝๅ
- ๆจกๅผๅน้
ๅ
match
่กจ่พพๅผ
- ๅค้็ญๅผ๏ผๅจ็ผ่ฏๆถๆงๅถๅชไบ็ญๅผๆฏ่พๆๆไน็่ฝๅ
- ไธญ็ผๆนๆณ
- ๅฎๅๅ
็ผ็จ
Scala ๅ่ๆ็ฏๅข
ๅจ Scala ไธญ๏ผๆ ้ๆพๅผ่ฎพ็ฝฎ Python ่ๆ็ฏๅข็็ญไปท็ฉใ้ป่ฎคๆ
ๅตไธ๏ผScala ๆๅปบๅทฅๅ
ท็ฎก็้กน็ฎไพ่ต้กน๏ผๅ ๆญค็จๆทไธๅฟ
่่ๆๅจๅฎ่ฃ
ๅ
ใไพๅฆ๏ผไฝฟ็จ sbt
ๆๅปบๅทฅๅ
ท๏ผๆไปฌๅจ libraryDependencies
่ฎพ็ฝฎไธ็ build.sbt
ๆไปถไธญๆๅฎไพ่ตๅ
ณ็ณป๏ผ็ถๅๆง่ก
่ชๅจ่งฃๆ่ฏฅ็นๅฎ้กน็ฎ็ๆๆไพ่ต้กนใ ไธ่ฝฝไพ่ต็ไฝ็ฝฎๅพๅคง็จๅบฆไธๆฏๆๅปบๅทฅๅ
ท็ไธไธชๅฎ็ฐ็ป่๏ผ็จๆทไธๅฟ
็ดๆฅไธ่ฟไบไธ่ฝฝ็ไพ่ตไบคไบใ ไพๅฆ๏ผๅฆๆๆไปฌๅ ้คๆดไธช sbt ไพ่ต้กน็ผๅญ๏ผๅๅจ้กน็ฎ็ไธไธๆฌก็ผ่ฏๆถ๏ผsbt ไผ่ชๅจ้ๆฐ่งฃๆๅนถๅๆฌกไธ่ฝฝๆๆๅฟ
้็ไพ่ต้กนใ
่ฟไธ Python ไธๅ๏ผ้ป่ฎคๆ
ๅตไธ๏ผไพ่ต้กนๅฎ่ฃ
ๅจ็ณป็ป่ๅดๆ็จๆท่ๅด็็ฎๅฝไธญ๏ผๅ ๆญค่ฆๅจๆฏไธช้กน็ฎ็ๅบ็กไธ่ทๅพ้็ฆป็ฏๅข๏ผๅฟ
้กปๅๅปบ็ธๅบ็่ๆ็ฏๅขใ ไพๅฆ๏ผไฝฟ็จ venv
ๆจกๅ๏ผๆไปฌๅฏไปฅๅ่ฟๆ ทไธบ็นๅฎ้กน็ฎๅๅปบไธไธช
cd myapp
python3 -m venv myapp-env
source myapp-env/bin/activate
pip install -r requirements.txt
่ฟไผๅจ้กน็ฎ็ myapp/myapp-env
็ฎๅฝไธๅฎ่ฃ
ๆๆไพ่ต้กน๏ผๅนถๆดๆน shell ็ฏๅขๅ้ PATH
ไปฅไป myapp-env
ๆฅๆพไพ่ต้กนใ
ๅจ Scala ไธญ๏ผ่ฟไบๆๅจ่ฟ็จ้ฝไธๆฏๅฟ
้็ใ