π Chapter 2: μ€μΉΌλΌλ‘ ν¨μν νλ‘κ·Έλλ° μμνκΈ°
π μ€μΉΌλΌ μΈμ΄μ μκ°: μμ νλβ
μ΄λ² μ μ λͺ©νλ μ€μΉΌλΌ μΈμ΄μ κ·Έ ꡬ문(λ¬Έλ²)μ μκ°νλ κ²μΌ λΏμ΄λ€.
// μ΄κ²μ μ£Όμ!
/* μ΄κ²λ μ£Όμ */
/** λ¬Έμν μ£Όμ */
object MyModule { // λ¨μΌ κ°μ²΄μ μ μΈ ν΄λμ€μ ν΄λμ€μ μ μΌν μΈμ€ν΄μ€λ₯Ό λμμ μ μΈνλ€.
def abs(n: Int): Int =
// λ§μ½ nμ΄ 0λ³΄λ€ μμΌλ©΄ nμ λΆμ (λΆνΈκ° λ°λ)μ λλ €μ€λ€.
if (n < 0) -n
else n
// μ μ©(private) λ©μλλ μ€μ§ MyModuleμ λ€λ₯Έ λ©€λ²λ€λ§ νΈμΆν μ μλ€.
private def formatAbs(x: Int) = {
// μμΉλ₯Ό μν μ리ν %dκ° λ κ° μλ λ¬Έμμ΄.
val msg = "The absolute value of %d is %d"
// λ¬Έμμ΄ λ %d μ리νλ₯Ό κ°κ° xμ abs(x)λ‘ μΉννλ€.
msg.format(x, abs(x))
}
// Unitμ Javaλ C κ°μ μΈμ΄μ voidμ κ°μ λͺ©μ μΌλ‘ μ°μΈλ€.
def main(args: Array[String]): Unit =
println(formatAbs(-42))
}
μ€μΉΌλΌ μ½λλ λ°λμ object
λ‘ μ μΈλλ κ°μ²΄λ class
λ‘ μ μΈλλ ν΄λμ€ μμ λ€μ΄κ°μΌ νλλ°, μ¬κΈ°μλ λ μ€ λ κ°λ¨ν object
λ₯Ό μ¬μ©νλ€.
abs
λ©μλλ μ μ νλλ₯Ό λ°μμ κ·Έ μ λκ°μ λλ €μ£Ό λ μμ ν¨μμ΄λ€.
def abs(n: Int): Int =
if (n < 0) -n
else n
λ©μλ μ체μ λ³Έλ¬Έμ λ±νΈ(=
) λ€μμ μ¨λ€. νν, λ©μλ μ μΈμμ λ±νΈ μΌμͺ½μ μλ κ²μ μ’λ³ λλ μλͺ
μ΄λΌκ³ λΆλ₯΄κ³ λ±νΈ μ€λ₯Έμͺ½μ μ½λλ₯Ό μ°λ³ λλ μ μλΌκ³ λΆλ₯Έλ€. λ©μλμ μ μμ λͺ
μμ μΈ return
ν€μλκ° μλ€. κ·Έλ₯ μ°λ³μ νκ° κ²°κ³Όκ° κ³§ λ©μλμ λ°νκ°μ΄λ€.
formatAbs
λ©μλ μμ μμ ν¨μμ΄λ€.
private def formatAbs(x: Int) = {
val msg = "The absolute value of %d is %d"
msg.format(x, abs(x))
}
μ΄ λ©μλλ private
λ‘ μ μΈλμ΄ μλ€. μ΄λ μ΄ λ©μλλ₯Ό MyModule
κ°μ²΄μ μ€λΆμμλ νΈμΆν μ μμμ λ»νλ€. μ΄ ν¨μλ Int
νλλ₯Ό λ°κ³ String
νλλ₯Ό λλ €μ£Όλλ€, λ°ν νμμ΄ μ μΈλμ΄ μμ§ μλ€. μ€μΉΌλΌκ° λ©μλμ λ°ν νμμ μΆλ‘ ν μ μλ κ²½μ°κ° λ§μΌλ©°, κ·Έλ΄ λμλ λ°ν νμμ μλ΅ν μ μλ€. κ·Έλ¬λ λ€λ₯Έ μ¬λμ΄ μ¬μ©ν λ©μλμμλ λ°ν νμμ λͺ
μμ μΌλ‘ μ§μ ν΄ μ£Όλ κ²μ΄ λμ²΄λ‘ μ’μ μ€νμΌλ‘ κ°μ£Όλλ€.
λ§μ§λ§μΌλ‘, main
λ©μλλ μμ ν¨μμ ν΅μ¬λΆλ₯Ό νΈμΆνκ³ κ·Έ κ²°κ³Όλ₯Ό μ½μμ μΆλ ₯νλ μΈλΆ κ³μΈ΅(shell)μ΄λ€. λΆμ ν¨κ³Όκ° λ°μν¨μ κ°μ‘°νκΈ° μν΄, μ΄λ° λ©μλλ₯Ό μ μ°¨(procedure) λλ λΆμ ν¨μ(impure function)λΌκ³ λΆλ₯΄κΈ°λ νλ€.
def main(args: Array[String]): Unit =
println(formatAbs(-42))
main
μ΄λΌλ μ΄λ¦μ νΉλ³νλ€. νλ‘κ·Έλ¨μ μ€νν λ μ€μΉΌλΌκ° νΉμ ν μλͺ
μ κ°μ§ main
μ΄λΌλ μ΄λ¦μ λ©μλλ₯Ό μ°ΎκΈ° λλ¬Έμ΄λ€. μ’ λ ꡬ체μ μΌλ‘, main
λ©μλλ λ°λμ String
λ€μ Array
λ₯Ό μΈμλ‘ λ°μμΌ νλ©°, λ°ν νμμ λ°λμ Unit
μ΄μ΄μΌ νλ€.
μ€μΉΌλΌμμ λͺ¨λ λ©μλλ νμ£Όνμ§ μλ ν μ΄λ€ κ°μ λλ €μ€λ€. κ·Έλ°λ° main
μ λ±ν μλ―Έ μλ κ°μ λλ €μ£Όμ§ μλλ€. νΉλ³ν νμμΈ Unit
μ κ·Έλ° γ΄λ©μλμ λ°ν νμμΌλ‘ μ°μΈλ€. μΌλ°μ μΌλ‘, λ°ν νμμ΄ Unit
μ΄λΌλ κ²μ κ·Έ λ©μλμ λΆμ ν¨κ³Όκ° μ‘΄μ¬ν¨μ μμνλ€.