๋ฌธ์ #1273์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์ง์ญ ์ฃผ๋ฏผ์ ๋ํด let mut
, ๋ณ๊ฒฝ ๊ฐ๋ฅํ ํ๋์ ๋ํด mut
๋ฅผ ์ ์ํ์ต๋๋ค. let mut
๋ ๋จ์ผ ํค์๋๋ณด๋ค ๋ ์ฅํฉํ๋ฉฐ ์ด ์ ๋ ฌ๋ ๊นจ๋จ๋ฆฝ๋๋ค. ์ฌ๋๋ค์ ๊ฐ๋ณ ํ๋ ์ ์ธ์ ๋ํ var
์์ด๋์ด๋ฅผ ์ข์ํ์ง ์์์ต๋๋ค. ํ์ง๋ง ์๋ฌด๋ ์ฌ์ฉํ๋ ์์ด๋์ด ์ ์ ์๋ค๊ณ ์๊ฐ var
๊ฐ๋ณ ์ง์ญ ์ ์ธ๊ณผ๋ฅผ mut
๊ฐ๋ณ ํ๋ ์ ์ธ์ ๋ํ :
let x = 7; // declaration of immutable variable x
var y = 7; // declaration of mutable variable y
type point = { mut x: int, mut y: int }; // declaration of mutable record type
๋ฐ์ด๋ธ
๊ณ ๋ฐฑํด์ผ ํฉ๋๋ค. ์ฒ์์๋ ๊ฐ๋ณ ๋ณ์์ ๊ฐ๋ณ ํ๋์ ๊ฐ์ ํค์๋๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค๊ณ ์๊ฐํ์ง๋ง var
๋ ๊ฝค ์ ์ฝํ๋๋ค( let mut
์ข์ํ์ง๋ ์์ง๋ง).
๊ฐ๋ณ ๋ณ์๋ฅผ ์ ์ธํ๋ ๊ฒ์ด ๋ถ๋ณ ๋ณ์๋ณด๋ค ์กฐ๊ธ ๋ ๋ฒ๊ฑฐ๋ก์ด ๊ธฐ๋ฅ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํ๋ก๊ทธ๋๋จธ๊ฐ "์ผ๊ด์ฑ"์ ์ ์งํ๊ธฐ ์ํด ๋๋ "var"๊ฐ ๋ ๊ฐ๋ ฅํ๊ธฐ ๋๋ฌธ์ "var"๋ง ์ฌ์ฉํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค(๋์ค์ ๋ณ๊ฒฝํ๊ธฐ๋ก ๊ฒฐ์ ํ ๊ฒฝ์ฐ ๋ณ๊ฒฝํ ํ์๊ฐ ์์). ๊ทธ๋ฌ๋ฉด ์ ๋ฐ์ ์ผ๋ก ๋ ์ฝ๊ธฐ ์ฌ์ด ์ฝ๋๊ฐ ๋ฉ๋๋ค.
Rust๊ฐ ์ฌ๊ฐํ ์๋ฐ ๋ฐ ๊ท์จ ์ธ์ด๊ฐ ๋์ด์ผ ํ๋ค๊ณ ์ ์ํ๋ ๊ฒ์ ์๋์ง๋ง ์ฌ๋ฐ๋ฅธ ๋ฐฉํฅ์ผ๋ก ๋ถ๋๋ฝ๊ฒ ๋์ง๋ฅผ ํ๋ ๊ฒ์ด ๋๋์ ์ผ๋ก ์ ๋นํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ ์ฝ๊ฒ ์๋ง์ด ๋๋ ๊ตฌ์กฐ").
ํํธ์ผ๋ก๋ ์ด ํ์์์ ์๊ฐ์ ๋ชจํธ์ฑ์ ์ ๊ฑฐํ๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ์ข์ํฉ๋๋ค.
let mut x = 4,
y = 8; // is y mutable or not?
๊ทธ๋ฌ๋ ๋๋ ์ค๋ฐ์ ํธ์ ์๋ ค๋ ๊ฒฝํฅ์ด ์์ต๋๋ค. ๊ฐ๋ณ ๊ฐ์ฒด๋ฅผ ์ ์ธํ๋ ๊ฒ์ด ๊ผญ _๋ชป์๊ธด_์ผ ํ์๋ ์์ง๋ง, ๋จ ํ ๋ฒ์ ํค ์
๋ ฅ๋ง์ผ๋ก ๋ถ๋ณ ๊ฐ์ฒด๋ณด๋ค ์์ฑํ๊ธฐ๊ฐ ์กฐ๊ธ ๋ ํธ๋ฆฌํ๋ค๋ฉด ์๋ฏธ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ์ฑํ ํค์๋๋ ๊ณ ์ ํด์ผ ํ๋ฉฐ (IMO) var
๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ถ๋ณ์ฑ์ ์๋ํ๋ ์ธ์ด์์ ํนํ ๊ฐ๋ณ์ฑ์ ์ ๋ฌํ๊ธฐ ์ํด ์ผ๋ฐ ๋ณ์ ์ ์ธ ํค์๋๋ก ๋๋ฌด ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ var
๊ฐ ์ฐ๋ฆฌ์ let
๋ถ์ํ C# ํ๋ก๊ทธ๋๋จธ๋ฅผ ์๊ฐํด ๋ณด์ญ์์ค!
์์ ์ฝ๋ ์กฐ๊ฐ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด let mut
๋ฅผ ๋จ์ผ ํค์๋๋ก ๋ฐ๊พธ๋ ์์ด๋์ด๊ฐ ์ฌ์ ํ ๋ง์์ ๋ค์ง๋ง mut
์์ฒด๋ก ์ถฉ๋ถํ ๋ ์ ํค์๋๋ฅผ ๋์
ํ ์ด์ ๊ฐ ์์ต๋๊น? #1273์ ์๋ ์ ์?
@pcwalton ์ mut
์ฌ์ฉํ๋ ๊ฒ์ ๋ฌธ์ ๋ฅผ ์ง์ ํ์ต๋๋ค. ๋ ์ฝ๋ ๋ฆฌํฐ๋ด ๋ฐ ๋ธ๋ก ํํ์์ ๋ชจํธ์ฑ์ด ์์ด ํด๊ฒฐํ๊ธฐ ์ํด ์์์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ ํ์ํฉ๋๋ค.
{ mut x: int ...
๋ฆฌํฐ๋ด์ ๊ธฐ๋กํ๊ฑฐ๋ ์ง์ญ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฐจ๋จํ์๊ฒ ์ต๋๊น?
var
๊ฐ Rust์์ ๋ณ์๋ฅผ ์ ์ธํ๋ ๋ฐฉ๋ฒ์ด๊ณ let
๋ฅผ ์ ํ ์ฌ์ฉํ์ง ์๋๋ค๋ ๊ฒ์ ๋ฐฐ์ฐ๋ ๋ง์ ํ๋ก๊ทธ๋๋จธ๋ฅผ ๋ณผ ์ ์์์ต๋๋ค. ๊ฒฐ๊ตญ var
๋ JavaScript์ ๊ฐ์ ์ธ์ด์์ ์ง์ญ ๋ณ์๋ฅผ ์ ์ธํ๋ ๋ฐฉ๋ฒ์
๋๋ค. ๋๋ ์ด๊ฒ์ด ์ด ์ ์์ ์ข์ ์ ์ด๋ผ๊ณ ์๊ฐํ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค.
์ด์ ๋๊ตฐ๊ฐ๊ฐ ์ง๊ธ let
์ var
๊ธธ์ด๊ฐ ๊ฐ์ ์ ๋ ฌ์ ์ข์ ๊ฒ์ด๋ผ๊ณ ์ง์ ํ๋ ๊ฒ์ ์ฐ์ฐํ ๋ค์์ต๋๋ค.
๋๋ ๋ค์ ๋ฌด๊ด์ฌํ์ง๋ง ๋ ์งง๊ธฐ ๋๋ฌธ์ var
์ ํธํฉ๋๋ค. ๊ฐ๋ณ์ฑ์ ์ฑ๊ฐ์๊ฒ ๋ง๋๋ ๊ฒ์ ๋ด๊ฐ ๋ณด๊ธฐ์ ๋ฐ๋์งํ ๋ชฉํ๊ฐ ์๋๋๋ค. (์ฌ์ค, ๋๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ญํ ์ด ์ง์ฆ๋๋ ์ผ์ ํด์๋ ์ ๋๋ค๊ณ ์๊ฐํ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค. ๋๊ฐ์ ๊ฒ์ด ์๋ _๋ช
ํํ_ ์ผ๋ฟ์
๋๋ค.)
let
์ var
ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ์ด ์ฌ์ ํ ์กฐ์ฌ์ค๋ฝ๊ธด ํ์ง๋ง(Javascript์ ๊ฐ์ง๋ง 100% ๋ค๋ฆ) ๋ณ์๋ฅผ ๊ฐ์งํ๋ ๋ฆฐํธ ํจ์ค๊ฐ ์์ผ๋ฉด ๋ฌธ์ ๊ฐ ํจ์ฌ ๋ํ ๊ฒ์
๋๋ค. ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ์ ์ธ๋์์ง๋ง ์ค์ ๋ก๋ ๋ณ๊ฒฝ๋์ง ์์์ต๋๋ค.
๊ฐ๋ณ์ฑ์ ์ ํ์ ์ผ๋ถ๋ก ๋ง๋ค ๊ณํ์ด ์์ต๋๋ค. ๊ทธ๊ฒ์ด ์ง์ญ ์ฃผ๋ฏผ๋ค์๊ฒ ์ํฅ์ ๋ฏธ์น๊ณ ์ด๊ฒ์ด ๊ด๋ จ์ด ์๊ฒ ๋ง๋๋๊ฐ?
์ด๋์:
val x = ... // immutable (val-ue)
var y = ... // mutable (var-iable)
์ค์นผ๋ผ์์์ฒ๋ผ.
@brson ์ด ์ณ๋ค๊ณ ์๊ฐ mut
๋ฅผ ์ ํ์ผ๋ก ์ด๋ํ๋ฉด ์ด ๋ฌธ์ ๊ฐ ์ฌ๋ผ์ง๋๋ค. ์ฆ, let x = mut 10;
๋ฅผ ์ป์ต๋๋ค.
์ง๊ธ์ ์ด ๋ฌธ์ ๋ฅผ ๋ซ์ต๋๋ค. ๋ด๊ฐ ํ๋ ธ๋ค๊ณ ์๊ฐํ๋ฉด ๋ค์ ์ด์ด!
๋๋ ์ด๊ฒ์ ๋ํด ํ์ ํ์ง ๋ชปํ๋ค. ๋๋ mut์ ์ ํ์ผ๋ก ์ฎ๊ธฐ๋ ์์ด๋์ด๋ฅผ ์ข์ํ์ง๋ง ๊ทธ๊ฒ์ด "์๋ฃ๋ ๊ฑฐ๋"์ธ์ง๋ ๋ชจ๋ฆ
๋๋ค. ์ด์จ๋ , ๋๋ let x = mut 5
์ธ ์ ์๋ค๊ณ ์๊ฐํ ์ ์ด ์์์ต๋๋ค. ์ ๋ ํญ์ ์ค๋์ฒ๋ผ let mut x = 5
์ธ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํ์ต๋๋ค. ๋ณ์ ์ ํ์ "๊ฐ๋ณ์ฑ"์ ํ ๋น๋ ๊ฐ์ด ์๋๋ผ ์ ์ธ๋ ๋ฐฉ์์์ ๋น๋กฏ๋ฉ๋๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด [mut int]
์ ํ์ ๋ฐฐ์ด x
์ด ์๊ณ let y = x[0]
ํ๋ฉด y
๊ฐ ๋ณ๊ฒฝ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋๋ ๋ญ๊ฐ? ๋ฐ๋์งํ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
@Dretch ์ค์นผ๋ผ ์ ๋ก๋ ์ข์ง๋ง ์ถฉ๋ถํ ๊ตฌ๋ณ๋์ง ์๊ธฐ ๋๋ฌธ์ val/var๋ฅผ ์ข์ํ์ง ์์ต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก var
๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ๋ ์ฌ๋๋ค์ ๋ํ @eholk ์ ์ฐ๋ ค๋ฅผ ๊ณต์ ํฉ๋๋ค. ์ง๊ธ ์๋ํ๋ ๋ฐฉ์์ ๋ชจ๋ ๊ฒ์ ๋ถ๋ณ์ผ๋ก ์ ์ธํ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ปดํ์ผ๋ฌ๋ ๋ณ๊ฒฝ ๊ฐ๋ฅํด์ผ ํจ์ ์๊ธฐ์ํจ ๋ค์ mut
ํฉ๋๋ค. ์ด๊ฒ์ var/let
๋ถํ ์ ์ฌ์ฉํ๋ ๊ฒฝํฅ์ด ๋ํ ์ข์ ํ๋์
๋๋ค. var
๋ฐ let
๊ฒ์ ๋๊ฐ์ด ์ด๋ ต์ง๋ง let mut
์
๋ ฅํ ์๋ ์์ต๋๋ค. let
let mut
๋ฅผ ์
๋ ฅํ์ง ์๊ณ let
.
๊ทธ๋ฌ๋ ๋๋ ์ ํธํ๋ ๊ฒ์ด ์์ผ๋ฉฐ ์ธ ๊ธ์ ํค์๋๋ก ์์ํ๋ ๋ช ๋ น๋ฌธ์ ๊ธฐ๋ฅ์ ์์ ํ ๊ตฌ์ฑํ ์ ์๋ค๋ ์ ์ ๊ฐ์ฌํฉ๋๋ค.
@nikomatsakis ํนํ, ๋จ์ผ ํ ๋น์ ๋ํ ๊ท์น์ ์ ํ์ด ์๋๋ผ ์ ์ธ์ ๊ฐ๋ณ์ฑ์์ ๋น๋กฏ๋์ด์ผ ํ๋ค๋ ๊ฒ์ด ๋์๊ฒ ์ดํด๊ฐ ๋ฉ๋๋ค. ๋ฏธ๋ฌํ๊ฒ ํ ๋น ๊ท์น์ ๊ธฐ๋ฐ์ผ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋์๊ฒ ์ฌ๋ฏธ์๋ ๋์๊ฐ๋ฉ๋๋ค.
๋๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ํ๋ ๊ฒฝ์ฐ ๊ฐ๋ณ ๋ฐ์ธ๋ฉ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋ํด ๋ถ์ด์ต ์ ์๋๋ค๋ @pcwalton์ ์๊ฒฌ์ ๋์ํฉ๋๋ค. var
๋ถํ์ํ๊ฒ ์ฌ์ฉํ๋ ์ฌ๋๋ค์ ๋ํ ์ฐ๋ ค์ ๊ดํด์๋ var
๋ฐ์ธ๋ฉ์ด ๋จ์ผ ํ ๋น๋ ๊ฒฝ์ฐ ๋ถํํ๋ ์ ํ์ ๊ฒฝ๊ณ ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ํ Rustc์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ข์ ์คํ์ผ์ ์ ๋ก๋ฅผ ์ธ์ธ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ฐ์ด๋ธ
ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ชจ๋ ๋ณ์๋ฅผ ๋ณ๊ฒฝ ๊ฐ๋ฅํ๋ค๊ณ ์ ์ธํ๋ฉด ์ ๋ง ๋์ฐํฉ๋๊น? var
๊ฐ ๋ณ์๋ฅผ ์ ์ธํ๋ ๋ฐฉ์์ด๋ผ๊ณ ์๊ฐํ๋ Rust ํ๋ก๊ทธ๋๋จธ ์ธํธ์ ๋๋ถ๋ถ์ ์๊ฐ์ let
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ดํดํ๋ ๋ค๋ฅธ ์ธํธ๊ฐ ์๋ค๋ฉด ์ธ์์ ๋์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค var
ํ์ํ ๋ var
. ์ต์ด์ Rust ํ๋ก๊ทธ๋๋จธ๋ก์, ์ฐ๋ฆฌ๋ let
์ var
์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ๋๋ก ์ ๋ก๋ฅผ ์ ํ ์ ์์ต๋๋ค.
IMHO์ ์ข์ ๊ตฌ๋ฌธ ๋์์ธ์ ๋น์ ์ด ํ๊ณ ์ถ์ "๋ชจ๋ ๊ฒ"์ ํธ๋ฆฌํ๊ฒ ๋ง๋๋ ๊ฒ์ด ์๋๋ผ ์ธ์ด์ ์๋ฏธ์ ๋์์ธ ๋ชฉํ์ "์ํํ ๊ฒฝ๋ก"๋ก ์ฌ๋๋ค์ ๋ถ๋๋ฝ๊ฒ ๋ฐ์ด ๋ฃ๋ ๊ฒ์ ๋๋ค.
์๋ฅผ ๋ค์ด, Rust์ ๊ธฐ๋ณธ ์์น ์ค ํ๋๋ ํจ์จ์ ์ด์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ฐ๊ฒฐ ๋ชฉ๋ก์ ๋ํ ํน๋ณํ ๊ตฌ๋ฌธ ์ง์์ ์ถ๊ฐํ์ง ์์ ๊ฒ์ ๋๋ค. ๊ฐ์ ์ด์ ๋ก ์ค๋ ๋ ๊ฐ์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๋ ๊ฒ์ ๋๋ฌด ํธ๋ฆฌํ์ง ์์์ผ ํ๊ณ (์์ ํ ๋์์ฑ์ด ๋ ๋ค๋ฅธ ์์น์ด๊ธฐ ๋๋ฌธ์), ์์์ int๋ฅผ ํฌ์ธํฐ๋ก ์บ์คํ ํ๋ ๊ฒ๋ ๋งค์ฐ ํธ๋ฆฌํด์๋ ์ ๋ฉ๋๋ค(๋ฉ๋ชจ๋ฆฌ ์์ ์ด ํฐ ์์น์ด๊ธฐ ๋๋ฌธ์).
์ด๋ฌํ ์ผ์ ํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํด์ผ ํ๋ค๋ ๊ฒ์ ๋งํ ๊ฒ๋ ์๊ณ , ๋จ์ง ๋น๋ก์ ์ผ๋ก ๋ถํธํ ๋ฟ์ด๋ฏ๋ก Rust๋ฅผ ์์ฑํ๋ ๊ด์ฉ์ ๋ฐฉ๋ฒ์ธ ๊ตฌ๋ฌธ์์ ๋ช ํํ๊ฒ ์ ์ ์์ต๋๋ค.
๋ณ๊ฒฝ ๊ฐ๋ฅํ (๋ก์ปฌ) ๋ณ์๋ ์ด๋ค ์ค ์ด๋ ๊ฒ๋งํผ ๋์์ง ์์ง๋ง, ๋ง์ฝ Rust๊ฐ ์ ํ์ฑ๊ณผ ์ ์ง ๊ด๋ฆฌ๋ฅผ ์ํด ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ฅผ ์ ํธํ๋ค๋ฉด(์ ๊ฐ ๊ฐ์ธ์ ์ผ๋ก ๋์ํ๋ ๊ฒ์ ๋๋ค), ๊ตฌ๋ฌธ์ ์ด์์ ์ผ๋ก ๊ทธ ๋ฐฉํฅ์ผ๋ก ๋ถ๋๋ฝ๊ฒ ์์ง์ฌ์ผ ํฉ๋๋ค. ํ๋์ ์ถ๊ฐ ๋ฌธ์๋ ์ถ๊ฐ ์์ ๊ธฐํธ ๋๋ "let"์ด "let mut" ๋๋ "let!"๋ณด๋ค ๋ ๋ณต์กํ๋ค๋ ๊ฒ์ ๋ถ๋ช ํ ํ๊ธฐ์ ์ถฉ๋ถํ ๊ฒ์ ๋๋ค. ๋๋ ๋ฌด์์ด๋ , ๋ฐ๋ผ์ ์ค์ ๋ก ๋ณ์๋ฅผ ๋ณ๊ฒฝํ ํ์๊ฐ ์์ ๋ ์๋ํด์ผ ํ๋ ๊ธฐ๋ณธ ๊ธฐ๋ณธ๊ฐ์ด์ด์ผ ํฉ๋๋ค.
@ssylvan ์ค, ๋๋ ๊ทธ ์ ์ ์ดํดํฉ๋๋ค. ๊ทธ๊ฒ์ ๋จ์ง ์ ๋์ ๋ฌธ์ ์ด๊ณ ์ ์ถฉ์์ ๊ท ํ์
๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฏธ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ถ๋ณ์ฑ์ ์ฅ๋ คํ๊ณ ์์ผ๋ฉฐ IMO ๋ถ๋ณ ๋ก์ปฌ์ ๋ถ๋ณ ํ๋๋ณด๋ค ํ๋ณดํ๋ ๊ฒ์ด ๋ ์ค์ํฉ๋๋ค. (ํนํ IINM ์ดํ๋ก, ์ฐ๋ฆฌ๋ ํ ํด๋ก์ ์์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ก์ปฌ์ด ์ด์ค์ผ์ดํํ๋ ๊ฒ์ ํ์ฉํ์ง ์์ต๋๋ค.) ๊ทธ๋ฆฌ๊ณ ์ด ์๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ let
์ var
์ฌ์ด๋ฅผ ๋ฆฌํฉํ ๋งํ๋ ๊ธฐ๋ฅ์ ์์ค์ ์ด์ ๋ณด๋ค ํฝ๋๋ค. ๋ถ๋ณ์ ์ง์ญ ์ฃผ๋ฏผ์ ํ๋ณดํฉ๋๋ค. ์์นํํ๊ธฐ ์ด๋ ค์ฐ๋ ์ ๋๋์ผ ๋ฟ์
๋๋ค.
๋ฐ์ด๋ธ
์ด ๊ฒฝ์ฐ "let mut foo = bar"์ ๋ฐ๋๋ก "let foo = mut bar" ๋๋ "let foo := bar"๊ฐ ์ฒซ ๋ฒ์งธ ํ ํฐ์ ์ ๋ ฌํฉ๋๋ค. ์๋ง๋ ๋ณ์ ์ด๋ฆ์ ๊ฐ๋ณ ๊ธธ์ด์ผ ๊ฒ์ด๋ฏ๋ก ๋ฌธ์ ๋๋จธ์ง ๋ถ๋ถ์์ ์ถ๊ฐ ์์ ์๋ฅผ ํผํ๋ ๊ฒ์ ๊ทธ๋ค์ง ์ค์ํ์ง ์์ต๋๋ค.
์ค, ์ ๋ :=
์์ด๋์ด์ ๋ค์ ๋์ํฉ๋๋ค.
๋ฐ์ด๋ธ
๋ค์ ์๊ฐํด๋ณด๋ฉด, ํ์ค์นผ์ ์๊ตฌ์ ์ผ๋ก ๋ฉ์ง์ง ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ ๋ค์ ๊ฐ์ ธ. :)
๋ฐ์ด๋ธ
๋ํ let foo := bar
๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
let mut foo;
foo = bar;
๊ฐ์ ํจํด์ ์์ฑํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ํญ์ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ด ํจํด์ด ๋๋๋ก ์ ์ฉํ๋ค๋ ๊ฒ์ ์์์ต๋๋ค.
@eholk ๋๋ ๊ทธ๊ฒ์ด ๊ทธ๊ฒ์ ๋ฐฉ์งํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ์ฌ์ ํ ๊ฑฐ์ ๋ชจ๋ ์ฃผ๋ฅ ์ธ์ด์ ํ๋ก๊ทธ๋๋จธ๋ค์๊ฒ ๊ทธ๊ฒ์ด ๋๋ฌด ์ด์ํ๊ฒ ๋ณด์ผ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ฐ์ด๋ธ
:=
์ ๊ด๋ จํ์ฌ Go๋ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ ์ถ๋ก ํ ๋น์ ๋ํ๋
๋๋ค(์์ง ์ฃผ๋ฅ ์ธ์ด๋ ์๋์ง๋ง). ๊ทธ๋ฌ๋ ํ ๋์ ๋ ํ์์ ๊ตฌ๋ณํ๋ ๋ฐ ์ด๋ ค์์ด ์์์ ์ ์ ์์ต๋๋ค.
let foo = "hello";
let foo := "hell";
ํ์ฌ ๊ตฌ๋ฌธ์ ๋ํ brson์ ์ฃผ์ฅ(์ฆ, ๊ฐ๋ณ ์ ์ธ์ด ๋จผ์ ๋ถ๋ณ ์ ์ธ์ ํ์๋ก ํจ)์ ์ค๋๋ ฅ์ด ์์ต๋๋ค. ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ๋ ๋จ์ ์ด๋ผ๋ฉด, ๊ทธ๊ฒ์ ๋ํด ๋ฐ๋ณด๊ฐ ์๋ ํ ์์ ํ ์ข์ต๋๋ค. :)
=
๋ :=
. ๋๋ถ๋ถ val
, var
๋ฐ ๊ทธ ๋ณํ์ ๋ฐ๋ํฉ๋๋ค. ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ์ ์ ์ดํ๋ค๋ ๊ฒ์ _๋ช
๋ฐฑํ_ ๊ฒ์ด ์๋๋๋ค. ๋ด ๋ง์, ๋๋ ์ฐ๋ฆฌ๊ฐ ๊ทธ๋ค ์ค ํ๋๋ฅผ ์ฑํํ๋ฉด ํ์ค๊ฐ์ ๊ทธ๋ง๋์ง ์์ ๊ฒ์ด์ง๋ง, "๋๋ชจ๋์ ์ค๋ช
ํ ํ์๊ฐ ์๋ค"๋ ๊ฒ์ ๋์ ์ง์กฐ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ๋ ๊ด์ฐฎ๋ค:
mut
๋จ๋
์ผ๋ก ๋ก์ปฌ ์ ์ธ์๋ก ์๋ํ๋๋ก ํ๊ณ ํ์๊ฐ ๋ ์ฝ๋ ๊ตฌ๋ฌธ ๋ ๋ก์ปฌ ์ ์ธ์ ๋ํ ์ปค๋ฐ์ ์ง์ฐํ๋๋ก ์๊ตฌํฉ๋๋ค. ์ฌ์ ํ LL(1)์ ์ถ๊ฐ ์ค๊ฐ ๋ฌธ๋ฒ ์ํ๋ฅผ ์ถ๊ฐํ๊ณ ์ถ๊ฐ ์ญ์ถ์ ์ ์์ต๋๋ค(์์ผ๋ก ๋ ๊ฐ์ง ๋ฐฉ๋ฒ ๋ชจ๋ ์ ํจํจ).let mut
."์ฐ์ฐํ" ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ก์ปฌ์ ํผํ๋ ์ฃผ๋ ์ด์ ๋ ํ๊ฒฝ ์บก์ฒ๋ฅผ ๋์ ํ์ฌ ์ฐจ์ฉ๊ณผ ๊ฐ์ ๋ค์ํ ๋ถ์์ ๋ํ ์ํ๋ฟ๋ง ์๋๋ผ ์๊ฑฐ๋ฆฌ ํ๋์ ํํ๋ก ๋ณํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
(๋ชจ๋ let์ ์ฒ์์๋ ๋ณ๊ฒฝ ๊ฐ๋ฅํ์ง๋ง ํ๊ฒฝ ์บก์ฒ๋ ์์๊ณ ๋ฐ์ธ๋ฉ๋ง ํ์ต๋๋ค. ์ด์ ๋ฐ์ธ๋ฉ์ด ์๊ณ env ์บก์ฒ๋ง ์์ต๋๋ค. Tomayto, tomahto.)
๋๋ mutables๊ฐ ์ง๊ธ ์์์ ์ผ๋ก ์บก์ฒ๋ ์ ์๋ค๊ณ ๋ฏฟ์ต๋๋ค.
@graydon ์ ๋ ๊ฐ์ง ์๋ ๋๊ธฐ๊ฐ
fn@
์์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ณ์์ ์์์ "๋ณต์ฌ๋ณธ" ์บก์ฒํ์๋ ๋ ์ด์ ๊ด๋ จ์ด ์๋ค๋ ๊ฒ์ด ๋ฐํ์ก์ต๋๋ค. ๋ณ๊ฒฝ ๊ฐ๋ฅ/๋ถ๋ณ ๋ณ์์ ์ฌ์ฉ์ ์ค์ ๋ก ๋๋ฌด ์กฐ์กํ๊ธฐ ๋๋ฌธ์ ์ฐจ์ฉ์ ๋ณ์๋ฅผ "์ผ์์ ์ผ๋ก" ์ฐจ์ฉํ๋ค๋ ์์ด๋์ด๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ํฌ์ธํฐ๊ฐ ์๋ ๋์ ๋ณ์๊ฐ ์์ ๋์ง ์๋ ํ ๊ฐ๋ณ ๋ณ์๋ ๋ถ๋ณ ptr๋ก ์ฐจ์ฉ๋ ์ ์์ต๋๋ค. ๋ฒ์.
๋ณ๊ฒฝ ๊ฐ๋ฅ/๋ถ๋ณ ๋ก์ปฌ์ด๋ผ๋ ๊ฐ๋ ์ ์ ๊ฑฐํ๊ณ ์ด์ ๊ท์น์ผ๋ก ๋์๊ฐ ์ ์์ต๋๋ค. ๋ชจ๋ ๊ฒ์ด ๋ณ๊ฒฝ ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ํด๋ก์ ์ ์์์ ์ผ๋ก ๋ณต์ฌ๋ ๋ณ์๊ฐ ํด๋ก์ ๊ฐ ์์ฑ๋ ํ ์์ ๋ ๋ ๊ฒฝ๊ณ ๋ฅผ ๋ฐํํ ์ ์์ต๋๋ค.
์ธ ๋ฒ์งธ ๋๊ธฐ๊ฐ ์์ต๋๋ค. ๋ณ๊ฒฝํ ์ ์๋ ๋ณ์๊ฐ ๋ ์ฝ๊ฒ ์ถ๋ก ํ ์ ์์ต๋๋ค. ๋ชจ๋ ๊ฒ์ด ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์ ์ฒด ํจ์๋ฅผ ๊ฒ์ํ์ฌ ๋ณ์๊ฐ ์๋ช ๋์ ์ด๋ค ๊ฐ์ ๊ฐ์ง ์ ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ๋ชจ๋ ๋ณ์๋ ์ ์ฌ์ ์ผ๋ก ๋ณต์กํ ๋ฐ์ดํฐ ํ๋ฆ(ํนํ ๋ฃจํ, ๋ถ๊ธฐ, ๋ณ๊ฒฝ ๊ฐ๋ฅํ ํจ์ ๋งค๊ฐ๋ณ์ ๋ฑ)์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ๋ชจ๋ ๋ช ๋ น๋ฌธ์ ์ฃผ์ ๊น๊ฒ ๋ถ์ํ์ง ์๊ณ ๋ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ํ์ธํ๊ธฐ ์ด๋ ต์ต๋๋ค. ํจ์์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ณ์๊ฐ ํ๋ ๋๋ ๋ ๊ฐ๋ง ์๋ ๊ฒฝ์ฐ ํด๊ณผ ๊ด๋ จ๋ ์ฝ๋๋ฅผ ์ฝ์ ๋ ๋ ์ฃผ์ํ ์ ์๋๋ก ์ผ์ข ์ "ํ๋๊ทธ" ์ญํ ์ ํฉ๋๋ค.
@Dretch ๋ํ "val" ๋ฐ "var" ํค์๋๊ฐ ์๋ Scala ์คํ์ผ์ ์ข์ํฉ๋๋ค.
๋๋ ํ์ฌ ๊ตฌ๋ฌธ์ด ์ด๋ป๊ฒ mutables๊ฐ ์ํ ์์ง์๊ฐ๋ฝ์ฒ๋ผ ํ์ด๋์ค๊ฒ ๋ง๋๋์ง๋ฅผ ์ข์ํฉ๋๋ค. ์ฝ๋๋ฅผ ๋ ์ฝ๊ฒ ์ค์บํ ์ ์์ต๋๋ค. val
๋ฐ var
๋ ๊ทธ๋ฐ ๋ฉด์์ ์๊ฐ์ ์ผ๋ก ๋๋ฌด ์ ์ฌํด ๋ณด์
๋๋ค. ๋ณ๊ฒฝ ๊ฐ๋ฅํ ํญ๋ชฉ์ด ์ ๋์ ์ผ๋ก _๋ฐ๋์_ ํ์ด๋์์ผ ํ๋ค๋ ๋ง์ ์๋์ง๋ง ํค์๋๋ฅผ ์๊ฐ์ ์ผ๋ก ๋๋ ทํ๊ฒ ์ ์งํ๋ ๊ฒ์ ์ฌ์ฉ์ฑ์ ์ค์ํ ์ธก๋ฉด์
๋๋ค.
๋ณ๊ฒฝ ๊ฐ๋ฅํ ํ๋๊ฐ ๋
น์์ ์ ๊ฑฐ๋ ๊ฒ์์ ์ดํดํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด let mut
๋์ mut
์ฌ์ฉํ ์ ์๋ค๋ ์๋ฏธ์
๋๊น? ๋ ์ฝ๋/๋ธ๋ก ๋ด ๋ณ์ ๋ชจํธ์ฑ์ด ์ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์
๋๊น?
๋ํ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ํ๋๊ฐ ๋จ์ ์์ด๋ ๋ชจํธ์ฑ์ ์ ๊ฑฐํ๋ ๊ตฌ์กฐ์ ๋ ์ฝ๋๊ฐ ์งํ ์ค์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
@Dretch ๋ณ๊ฒฝ ๊ฐ๋ฅํ ํ๋๊ฐ ์ฌ๋ผ์ง๊ณ ์๊ณ ๊ตฌ์กฐ์ ๋ ์ฝ๋๊ฐ ์ด๋ฏธ ์ฌ๋ผ์ง ๊ฒ์ด ์ฌ์ค์ ๋๋ค.
๋๊ฒฐ/ํด๋์ ๊ฒฝ์ฐ mut
๊ฐ ์์ฒด์ ์ผ๋ก ์ ์ธ ํค์๋(Dretch๊ฐ ์ ์ํ ๋๋ก)๊ฐ ๋๋ ๊ฒ์ด _๊ฐ๋ฅ์ฑ์ด ์์์ ์ง์ ํ๊ณ ์ถ์ต๋๋ค. . ์ค๋ ๋น๊ต:
let foo = 1; // immutable
/* 10,000 lines of code here */
let mut foo = foo; // we're making foo mutable, totally understandable
/* 10,000 lines of code here */
let foo = foo; // potential wtf
์ ์:
let foo = 1; // immutable
/* 10,000 lines of code here */
mut foo = foo; // a mutable foo, no problems here
/* 10,000 lines of code here */
let foo = foo; // slightly less of a potential for wtf, since we officially have two declaration forms
๋๋ ๋ํ ๋
น์ฃผ์ ํ ๊ฒ ๊ฐ์ ๋๋์ด ์์ง๋ง ์ฐ๋ฆฌ๋ ์ฌ์ ํ ๊ธฐ๋ก ํ ๊ฒ ๋๋ฌธ์ ๋ ์ผ๊ด "ํผ ์ํ ๋ฉ๋ชจ๋ฆฌ์ ๋ถ์ฌ๋ ๋ถ๋ณ์ฑ์ ์๋ฏธํ๋ค" let foo = 1;
์คํ๋ ค๋ณด๋ค๋ ๋ค๋ง foo = 1;
(ํ์์ ํํ๋ ๋ถ๋ช
ํ ์ ์ธ์ ๋ฐ๋์งํ์ง ์์).
Kotlin ์ val
๋ฐ var
ํฉ๋๋ค.
๋๋ ์ฐ๋ฆฌ๊ฐ ์ด ๋ณ๊ฒฝ์ ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ง๋ง, ์ ์ ์๋ ์ด์ ํ 1์ ์ง๋ช ํ์ฌ ํด๊ฒฐํ ์ ์๋๋ก ํ๊ฒ ์ต๋๋ค.
mut์ ํจํด ๋ฐ์ธ๋ฉ์ผ๋ก ์ด๋ํ๋ ๊ฒ๊ณผ ํธํ๋์ง ์๊ธฐ ๋๋ฌธ์ ์ด ์์ ์ ์ํํ์ง ์๋ ๊ฒ์ด ํฉ์์ ๋๋ค. ํ์.