åé¡ïŒ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?
ããããç§ã¯ã·ã«ãã³ãæ¯æããåŸåããããŸãã å¯å€ã宣èšããããšã¯å¿
ããã_éã_ã§ããå¿
èŠã¯ãããŸãããã1åã®ããŒã¹ãããŒã¯ã ãã§ãäžå€ãããäœæããã®ãéåžžã«äŸ¿å©ã§ãªãå Žåã¯çã«ããªã£ãŠãããšæããŸãã activatingããŒã¯ãŒããç¬ç¹ã§ããå¿
èŠããããïŒIMOïŒ var
ã¯ãããã©ã«ãã§äžå€æ§ãèªãèšèªã§å¯å€æ§ãå
·äœçã«äŒããã«ã¯ãæ±çšå€æ°å®£èšããŒã¯ãŒããšããŠããŸãã«ãåºã䜿çšãããŠããŸãã ãããŠã var
ãç§ãã¡ã®let
ã§ãã貧ããCïŒããã°ã©ããŒã«ã€ããŠèããŠã¿ãŠãã ããïŒ
äžèšã®ã³ãŒãã¹ããããã«å¯ŸåŠããããã«ã let mut
ãåäžã®ããŒã¯ãŒãã«çœ®ãæãããšããã¢ã€ãã¢ã¯ä»ã§ãæ°ã«å
¥ã£ãŠããŸããã mut
èªäœã§ååãªå Žå
@pcwaltonã¯ã mut
ã䜿çšããã ãã®åé¡ãææããŸãããã¬ã³ãŒããªãã©ã«ãšãããã¯åŒã«ã¯ãããŸãããããã解決ããã«ã¯ä»»æã®å
èªã¿ãå¿
èŠã§ãã
{ mut x: int ...
ãªãã©ã«ãèšé²ããŸããããããšãããŒã«ã«å€æ°ã§ãããã¯ããŸããïŒ
å€ãã®ããã°ã©ããŒãã var
ãRustã§å€æ°ã宣èšããæ¹æ³ã§ããã let
ããŸã£ãã䜿çšããŠããªãããšãç¥ã£ãŠããã®ãèŠãããšãã§ããŸããã çµå±ã®ãšããã var
ã¯ãJavaScriptãªã©ã®èšèªã§ããŒã«ã«å€æ°ã宣èšããæ¹æ³ã§ãã ããã¯ãã®ææ¡ã®è¯ããšããã ãšæãåŸåããããŸãã
æšæ¥èª°ããlet
ãšvar
é·ããåãã«ãªããšææããŠããã®ãè³ã«ããŸãããããã¯ãäœçœ®åããã«é©ããŠããŸãã
ç§ã¯ããç¡é¢å¿ã§ãããçãã®ã§var
æ¹ã奜ãã§ãã ç§ãèŠãŠããããã«ãå¯å€æ§ãç
©ãããããããšã¯æãŸããç®æšã§ã¯ãããŸããã ïŒç¢ºãã«ãããã°ã©ãã³ã°èšèªã®åœ¹å²ã¯ãäœãè¿·æãªããšãããããšã§ã¯ãªããåãããšã§ã¯ãªã_clear_ã ãã ãšæãââåŸåããããŸããïŒ
let
ãšvar
äžç·ã«äœ¿çšããããšã«ã¯ãŸã èŠæããŠããŸããïŒJavascriptãšåãã§ããã100ïŒ
ç°ãªããŸãïŒãå€æ°ãæ€åºããããã®lintãã¹ãããã°åé¡ã¯ã¯ããã«å°ãªããªããŸããå€æŽå¯èœãšããŠå®£èšãããŠããŸãããå®éã«ã¯å€æŽãããŠããŸããã
å¯å€æ§ãã¿ã€ãã®äžéšã«ããèšç»ããããŸãã ããã¯å°å ã®äººã ã«åœ±é¿ãåãŒãããããç¡é¢ä¿ã«ããŸããïŒ
ã©ãã§ããïŒ
val x = ... // immutable (val-ue)
var y = ... // mutable (var-iable)
Scalaã®ããã«ã
@brsonã¯æ£ãããšæããŸãããã®åé¡ã¯ã mut
ãã¿ã€ãã«ç§»åãããšæ¶ããŸããã€ãŸãã let x = mut 10;
ãååŸããŸãã
ä»ã®ãšãããã®åé¡ãéããŸãã ããªããç§ãééã£ãŠãããšæããªããåéããŠãã ããïŒ
ããã«ã€ããŠã¯ããããããŸããã mutãã¿ã€ãã«ç§»åãããšããã¢ã€ãã¢ã¯å¥œãã§ãããããããå®äºããååŒãã§ãããã©ããã¯ããããŸãã---ããã«ã¯é·åŒãå¥åŠããååšããå¯èœæ§ããããŸãã ãããã«ãããç§ã¯let x = mut 5
ãšæžããããããªããšã¯æã£ãŠããŸããã§ãããä»æ¥ãšåãããã«ã let mut x = 5
ãšæžããšãã€ãæã£ãŠããŸããã å€æ°ã®åã®ãå¯å€æ§ãã¯ãå€æ°ã«å²ãåœãŠãããŠããå€ã§ã¯ãªãã宣èšãããæ¹æ³ã«ç±æ¥ããŸãã
è¡ãã«ã¯ãããã§ãªãå Žåã¯ãããªããé
åããŠããå Žåããšãæå³ãããšæãããx
ã®ã¿ã€ãã®[mut int]
ããããªããæžãlet y = x[0]
ã次ã«y
å€æŽå¯èœãªã®ã§ããïŒ ãäœãïŒ ããã¯æãŸãããªãããã§ãã
@Dretch val / varã¯æ確ã§ã¯ãªãã®ã§å¥œãã§ã¯ãããŸããããScalaã®åäŸã¯çŽ æŽãããã§ãã
ããã©ã«ãã§var
䜿ãæ¹ãåŠã¶äººã
ã«ã€ããŠã®@eholkã®æžå¿µãå
±æããŸãã çŸåšã®åäœæ¹æ³ã§ã¯ããã¹ãŠãäžå€ãšããŠå®£èšããåŸåããããŸããã³ã³ãã€ã©ã¯ãå€æŽå¯èœã§ããå¿
èŠãããããšãéç¥ãã mut
ãŸãã ããã¯ééããªãè¯ãæ¯ãèãã§ããã var/let
åå²ã§ã¯ããŸãæ°ã«ãªããŸããã var
ãšlet
ãåæ§ã«å°é£ã§ããã let mut
å
¥åããããšãã§ããŸããã let
let mut
ãå
¥åããã«let
ã
ããããç§ã«ã¯å¥œã¿ã¯ãããŸããã3æåã®ããŒã¯ãŒãã§å§ãŸãã¹ããŒãã¡ã³ãã ãã§é¢æ°ãäœæã§ãããšãããããã§ãã
@nikomatsakisç¹ã«ãåäžå²ãåœãŠã«é¢ããã«ãŒã«ã¯ãã¿ã€ãã§ã¯ãªã宣èšã®
ç§ã¯@pcwaltonã«åæããvar
äžå¿
èŠã«äœ¿çšããŠãã人ã
ã«é¢ããæžå¿µã«ã€ããŠã¯ã var
ãã€ã³ãã£ã³ã°ãåç¬ã§å²ãåœãŠãããŠããå Žåã«æå¥ãèšããªãã·ã§ã³ã®èŠåãè¿œå ã§ããŸãã ããããrustcãšæšæºã©ã€ãã©ãªã§è¯ãã¹ã¿ã€ã«ã®å
äŸãäœãããšãã§ãããšæããŸãã
ãã€ã
ããã°ã©ããŒããã¹ãŠã®å€æ°ãå¯å€ã§ãããšå®£èšããå Žåãããã¯æ¬åœã«ã²ã©ãããšã§ããïŒ var
ãå€æ°ã®å®£èšæ¹æ³ã§ãããšèããRustããã°ã©ããŒã®ã»ãããšãã»ãšãã©ã®å Žålet
ã䜿çšããããšãç解ããŠããå¥ã®ã»ãããããå Žåãããã¯äžçã®çµããã§ã¯ãªãããã§ããå¿
èŠã«å¿ããŠvar
ã æåã®Rustããã°ã©ããŒãšããŠã let
ãšvar
æ£ãã䜿çšããããšãæ¯æããå
äŸãèšå®ã§ããŸãã
IMHOã®åªããæ§æèšèšãšã¯ãããããããšãã¹ãŠã䟿å©ã«ããã ãã§ãªããèšèªã®ã»ãã³ãã£ã¯ã¹ãšèšèšç®æšã®ãã¹ã ãŒãºãªãã¹ãã«äººã ãåªããèªå°ããããšã§ãã
ããšãã°ãRustïŒa la HaskellïŒã®ãªã³ã¯ãªã¹ãã«ç¹å¥ãªæ§æãµããŒããè¿œå ããããšã¯ãããããªãã§ããããRustã®åºæ¬ååã®1ã€ã¯å¹ççã§ããããªã³ã¯ãªã¹ãã®æ®åã¯ãã®ååã«åããŠæ©èœããããã§ãã åãçç±ã§ãã¹ã¬ããéã§å¯å€ããŒââã¿ãå ±æããããšã¯ããããããŸã䟿å©ã§ã¯ãããŸããïŒå®å šãªäžŠè¡æ§ã¯å¥ã®ååã§ããããïŒããŸããä»»æã®intããã€ã³ã¿ãŒã«ãã£ã¹ãããããšã¯éåžžã«äŸ¿å©ã§ã¯ãããŸããïŒã¡ã¢ãªã®å®å šæ§ã倧ããªååã§ããããïŒã
ãããã®ããšãè¡ãããšãäžå¯èœã§ããããšã¯èšããŸã§ããããŸããããRustãæžãæ £çšçãªæ¹æ³ã§ããæ§æããæãããªããã«ãæ¯äŸããŠäžäŸ¿ã§ãã
å¯å€ïŒããŒã«ã«ïŒå€æ°ã¯ãããã®ã©ããããæªãã¯ãããŸããããRustãæ£ç¢ºæ§ãšä¿å®äžã®çç±ïŒç§ãå人çã«åæãããã®ïŒã®ããã«äžå€ããŒã¿ãå®éã«æ¯æããŠããå Žåãæ§æã¯çæ³çã«ã¯ãã®æ¹åã«ç©ããã«åŸ®èª¿æŽããå¿ èŠããããŸãã åäžã®è¿œå ã®æåãè¿œå ã®ä¿®é£Ÿåã®å°ç« ããŸãã¯ãletãããletmutãããletïŒããããè€éã§ãªãããšãæ確ã«ããã®ã«ååãªãã®ã§ããã ãŸãã¯äœã§ãããããã£ãŠãå€æ°ãå€æŽå¯èœã«ããå¿ èŠãå®éã«ãªãå Žåã¯ãããã©ã«ããšããŠäœ¿çšããããšããå§ãããŸãã
@ssylvanãããç§ã¯ãã®ç¹ãç解ããŠããŸããããã¯çšåºŠã®åé¡ã§ããããã¬ãŒããªãã®ãã©ã³ã¹ã§ãã ç§ãã¡ã¯ãã§ã«ããŒã¿æ§é ã®äžå€æ§ãä¿é²ããŠãããIMOäžå€ããŒã«ã«ã¯äžå€ãã£ãŒã«ããããä¿é²ããããšãéèŠã§ã¯ãããŸããã ïŒç¹ã«ãIINM以éãå¯å€ããŒã«ã«ãããŒãã¯ããŒãžã£ã§ãšã¹ã±ãŒãããããšã¯èš±å¯ãããŠããŸãããïŒãŸããåæ°ãå€æŽããã«let
ãšvar
éã§ãªãã¡ã¯ã¿ãªã³ã°ããæ©èœã倱ãããããšã¯ãäžå€ã®å°å
ã®äººã
ãä¿é²ããã æ°å€åããã®ãé£ããã®ã§ãããã¯ç§ã®æ°æã¡ã ãšæããŸãã
ãã€ã
ãã®å Žåããlet mut foo = barãã§ã¯ãªããå°ãªããšããlet foo = mutbarããŸãã¯ãletfooïŒ= barãã§æåã®ããŒã¯ã³ãæŽåããŸãã ããããå€æ°åã¯å¯å€é·ã«ãªãã®ã§ãã¹ããŒãã¡ã³ãã®æ®ãã®éšåã§äœåãªä¿®é£Ÿåãé¿ããããšã¯ããã»ã©éèŠã§ã¯ãããŸããã
ãããç§ã¯:=
ã¢ã€ãã¢ã«å°ãåã£ãŠããŸãã
ãã€ã
èãçŽããŠã¿ããšããã¹ã«ã«ã¯æ°žä¹ ã«ã¯ãŒã«ã§ã¯ãããŸããã ç§ã¯ãããåãæ»ããŸãã :)
ãã€ã
ãŸãã let foo := bar
ã次ã®ãããªããšãé²ããŸãã
let mut foo;
foo = bar;
åããã¿ãŒã³ãæžãå¥ã®æ¹æ³ãåžžã«ããããã«æãããŸãããç§ã¯ãã®ãã¿ãŒã³ãæã 圹ç«ã€ããšã«æ°ã¥ããŸããã
@eholkãããããã劚ãããšã¯æããªãã ããããã»ãšãã©ãã¹ãŠã®äž»æµèšèªã®ããã°ã©ããŒã«ãšã£ãŠã¯ãããã§ãå¥åŠã«èŠãããšæããŸãã
ãã€ã
:=
ã«é¢ããŠ
let foo = "hello";
let foo := "hell";
çŸåšã®æ§æã«å¯Ÿããbrsonã®è°è«ïŒã€ãŸããå¯å€å®£èšã¯æåã«äžå€å®£èšãå¿ èŠãšããïŒã¯èª¬åŸåããããŸãã ããã°ã©ãã³ã°èšèªããããããããªãéããããã°ã©ãã³ã°èšèªãæèŠãè¿°ã¹ãããã°ãããã¯å®å šã«çŽ æŽãããããšã§ãã :)
=
ãš:=
ã¯èå³ããããŸããã val
ã var
ããã³ãããã®ããªãšãŒã·ã§ã³ãšã¯ã»ãšãã©å察ã§ãã ãããå¯å€æ§ãå¶åŸ¡ããããšã¯åã«_æçœ_ã§ã¯ãããŸããã ã€ãŸããã©ã¡ãããæ¡çšããŠãå«æªæãæã£ãŠãããããšã¯ãããŸãããããããŒã¢ããã¯ã説æããå¿
èŠãããããšããã®ã¯æªãå
åã ãšæããŸãã ç§ã¯ãã£ââãšå€§äžå€«ã§ãïŒ
mut
ã ããããŒã«ã«å®£èšåãšããŠæ©èœãããããŒãµãŒã«ã¬ã³ãŒãæ§æãšããŒã«ã«å®£èšã®ã³ãããã1ã€ã®è¿œå ããŒã¯ã³ã§é
ãããããã«èŠæ±ããŸãã ããã§ãLLïŒ1ïŒã¯ãè¿œå ã®äžéææ³ç¶æ
ãè¿œå ããã ãã§ãè¿œå ã®ããã¯ãã©ãã¯ã¯ãããŸããïŒã©ã¡ãã®æ¹æ³ã§ãæå¹ã§ãïŒãlet mut
ãŸãŸã«ããŠãããŸãããå¶çºçãªãå€æŽå¯èœãªããŒã«ã«ãåé¿ããäž»ãªçç±ã¯ãç°å¢ãã£ããã£ãå°å ¥ãããããããããé éäœçšã®åœ¢åŒã«ãªããåçšãªã©ã®ããŸããŸãªåæã®å±éºæ§ãçããããã§ãã
ïŒãã¹ãŠã®letã¯æåã¯å€æŽå¯èœã§ããããç°å¢ãã£ããã£ããã€ã³ãã®ã¿ã§ãããçŸåšããã€ã³ãã¯ãªããenvãã£ããã£ã®ã¿ã§ããTomaytoãtomahtoãïŒ
çŸåšãå¯å€å€æ°ãæé»çã«ãã£ããã£ããããšã¯ã§ããªããšæããŸãã
@graydonã¯ã2ã€ã®å ã ã®åæ©ããã£ãããšã¯æ£ããã§ãã ãã ããé¢é£ããã®ã¯1ã€ã ãã§ãã 2ã€ã®åæ©ã¯
fn@
å
ã®å¯å€å€æ°ã®æé»çãªãã³ããŒã«ããããã£ããã£åŸè ã¯ãã¯ãé¢ä¿ããªãããšãå€æããŸããã å¯å€/äžå€å€æ°ã®äœ¿çšã¯å®éã«ã¯ããŸãã«ãç²éã ã£ãã®ã§ãborrowckã¯å€æ°ããäžæçã«ãåçšãããšããèããæã£ãŠããŸã---ãã€ã³ã¿ãŒãå ¥ã£ãŠããéã«å€æ°ãå€æŽãããªãéããå¯å€å€æ°ã¯äžå€ptrã§åçšã§ããŸãç¯å²ã
ãããããå¯å€/äžå€ã®ããŒã«ã«ã®æŠå¿µãåé€ããŠãå€ãã«ãŒã«ã«æ»ãããšãã§ããŸã---ãã¹ãŠãå¯å€ã§ãã ãã®åŸãã¯ããŒãžã£ã®äœæåŸã«ã¯ããŒãžã£ã«æé»çã«ã³ããŒãããå€æ°ãå€æŽããããšãã«èŠåãçºè¡ã§ããŸãã
3çªç®ã®åæ©ããããŸãïŒäžå€ã®å€æ°ã¯æšè«ããã®ãç°¡åã§ãã ãã¹ãŠãå¯å€ã§ããå Žåã¯ãé¢æ°å šäœãã¹ãã£ã³ããŠãå€æ°ããã®åç¶æéäžã«ã©ã®ãããªå€ãæã€å¯èœæ§ããããã確èªããå¿ èŠããããŸãã ãã¹ãŠã®å€æ°ã«ã¯æœåšçã«è€éãªããŒã¿ãããŒïŒç¹ã«ã«ãŒãããã©ã³ããå¯å€é¢æ°ãã©ã¡ãŒã¿ãŒãªã©ïŒãããããã¹ãŠã®ã¹ããŒãã¡ã³ãã泚ææ·±ãåæããªããšäœãèµ·ãã£ãŠããã®ãã確èªããã®ã¯å°é£ã§ãã é¢æ°å ã«1ã€ãŸãã¯2ã€ã®å¯å€å€æ°ãããªãå Žåã¯ããããã«ããã©ã°ãç«ãŠããããã«æ©èœããããã裟ãå«ãã³ãŒããèªããšãã¯ãã泚æãå¿ èŠã§ãã
@Dretch ãvalããšãvarãã®ããŒã¯ãŒãã䜿ã£ãScalaã¹ã¿ã€ã«ã奜ãã§ãã
çŸåšã®æ§æã«ãã£ãŠããã¥ãŒã¿ãã«ã芪æã®ããã«çªãåºãã®ã奜ãã§ãã ã³ãŒãã®ã¹ãã£ã³ãç°¡åã«ãªããŸãã 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
ãŸããããã«ããRust-ismã®ãmutããªãããšã¯äžå€æ§ãæå³ãããã®äžè²«æ§ãäœäžããããã«æããŸããã foo = 1;
ã ãã§ãªãlet foo = 1;
èšè¿°ããŠããããã§ãïŒåŸè
ã®åœ¢åŒã¯æããã«å®£èšã«ã¯æãŸãããããŸããïŒã
Kotlinã¯val
ãšvar
ã䜿çšããŸãã
ãã®å€æŽãè¡ãã€ããã¯ãªããšæããŸãããæ確ã«å®çŸ©ããããã€ã«ã¹ããŒã³1ã«ããããŒãããã®ã§ãããã解決ããããšãã§ããŸãã
mutããã¿ãŒã³ãã€ã³ãã£ã³ã°ã«ç§»åããããšãšäºææ§ããªããããã³ã³ã»ã³ãµã¹ã¯ãããè¡ããªãããšã§ãã ééã