ããã«ã¡ã¯äœæ°ïŒå
¬åŒã®Rustããã°ã©ãã³ã°èšèªã¬ã€ãã¯ãããé«éã§ä¿¡é Œæ§ã®é«ããœãããŠã§ã¢ãäœæããã®ã«åœ¹ç«ã¡ãŸããé«ã¬ãã«ã®äººéå·¥åŠãšäœã¬ãã«ã®å¶åŸ¡ã¯ãã°ãã°äºãã«ççŸããŸãããRustã¯ãã®å¯Ÿç«ã«ææŠããŸãã
ãã®æ¬ã®èè ã¯èšèªéçºããŒã ã®äžå¡ã§ããã€ãŸããèšèªã®ã€ã³ã¹ããŒã«ããä¿¡é Œæ§ãé«ãã¹ã±ãŒã©ãã«ãªããã°ã©ã ã®äœæãŸã§ããã¹ãŠã®æ å ±ãçŽæ¥åãåãããšãã§ããŸãã颿°ã®äœæãããŒã¿ã¿ã€ãã®éžæã倿°ã®ãã€ã³ããããããè€éãªæŠå¿µã«é²ã¿ãŸãã
- æææš©ãšåå ¥ãã©ã€ããµã€ã¯ã«ãšã¿ã€ãã
- ä¿èšŒããããœãããŠã§ã¢ã»ãã¥ãªãã£ã
- ãã¹ãããšã©ãŒåŠçãããã³å¹æçãªãªãã¡ã¯ã¿ãªã³ã°ã
- ãžã§ããªãã¯ãã¹ããŒããã€ã³ã¿ãŒããã«ãã¹ã¬ãããååŒå¯èœãªãªããžã§ã¯ããããã³ãããã³ã°ã
- çµã¿èŸŒã¿ã®ããã±ãŒãžãããŒãžã£ãŒCargoãšé£æºããŠãã³ãŒãã®æ§ç¯ããã¹ããææžåãããã³äŸåé¢ä¿ã®ç®¡çãè¡ããŸãã
- UnsafeRustãæäœããããã®é«åºŠãªããŒã«ã
ããããã®ã³ãŒãäŸã«å ããŠãç¥èãåºããããã®å®å šãªãããžã§ã¯ãã®äœæã«é¢ãã3ã€ã®ç« ãã²ãŒã ã®æšæž¬ãã³ãã³ãã©ã€ã³ããŒã«ã®æ§ç¯ãããã³ãã«ãã¹ã¬ãããµãŒããŒããããŸãã
ãã®æ¬ã¯èª°ã®ããã®ãã®ã§ãã
ã³ãŒããå¥ã®ããã°ã©ãã³ã°èšèªã§èšè¿°ããããšãåæãšããŠããŸãããã©ã®èšèªã«ã€ããŠã¯æ³å®ããŠããŸãããç§ãã¡ã¯ããã®è³æãå¹ åºãããã°ã©ãã³ã°ã¹ãã«ãæã€äººã ãå©çšã§ããããã«ããããšã詊ã¿ãŸãããããã°ã©ãã³ã°ãšã¯äœãã«ã€ããŠè©±ãæéãç¡é§ã«ããŸãããããã°ã©ãã³ã°ã®åå¿è ã®æ¹ã¯ããŸãããã°ã©ãã³ã°ã®æŠèŠããèªã¿ãã ããã
ãã®æ¬ã®äœ¿ãæ¹
-, , , . , ; .
: . . , , . 2, 12 20 , â .
1 , Rust, «Hello, World!» Cargo. 2 Rust. , . , . 3, Rust, , 4 Rust. , , 2, 3, 2, . , .
5 , 6 , match if let. Rust .
7 (API). 8 , , , -. 9 .
10 , , , . 11 , Rust . 12 grep, . , .
13 â , . 14 Cargo . 15 , , , .
16 , Rust . 17 Rust - , , , .
18 , Rust. 19 , , Rust, , , .
20 , !
, . Rust, Rust, , , , Rust.
: -, ! - , , , . , , .
Rust â , : . , , . , , ! , , , , . , .
: . . , , . 2, 12 20 , â .
1 , Rust, «Hello, World!» Cargo. 2 Rust. , . , . 3, Rust, , 4 Rust. , , 2, 3, 2, . , .
5 , 6 , match if let. Rust .
7 (API). 8 , , , -. 9 .
10 , , , . 11 , Rust . 12 grep, . , .
13 â , . 14 Cargo . 15 , , , .
16 , Rust . 17 Rust - , , , .
18 , Rust. 19 , , Rust, , , .
20 , !
, . Rust, Rust, , , , Rust.
: -, ! - , , , . , , .
Rust â , : . , , . , , ! , , , , . , .
ãã¿ãŒã³ã䜿çšã§ããå Žæ
Rustã§ã¯ããã¿ãŒã³ãå€ãã®å Žæã«è¡šç€ºãããæ°ä»ããªããã¡ã«äœ¿çšããããšããããããŸãããã®ã»ã¯ã·ã§ã³ã§ã¯ããã¿ãŒã³ãæå¹ãªç¶æ³ã«ã€ããŠèª¬æããŸãã
åŒã®åå²ã«äžèŽ
第6ç« ã§èª¬æããããã«ãäžèŽåŒã®ãã©ã³ãã§ãã¿ãŒã³ã䜿çšããŸããæ£åŒã«ã¯ãäžèŽåŒã¯ãããŒã¯ãŒãmatchãæ¬¡ã«äžèŽããå€ãããã³ãã¿ãŒã³ãšãå€ããã®ãã©ã³ãã®ãã¿ãŒã³ãšäžèŽããå Žåã«å®è¡ãããåŒã§æ§æãããäžèŽã®1ã€ä»¥äžã®ãã©ã³ããšããŠå®çŸ©ãããŸããæ¬¡ã«äŸã瀺ããŸãã
match {
=> ,
=> ,
=> ,
}
äžèŽåŒã®èŠä»¶ã®1ã€ã¯ããã¹ãŠã®å¯èœãªå€ãäžèŽããŠãããšèŠãªãããå¿ èŠããããšããæå³ã§ãããããå æ¬çã§ããå¿ èŠãããããšã§ããèãããããã¹ãŠã®ãªãã·ã§ã³ãæ€èšããã«ã¯ãæåŸã®ãã©ã³ãã«ãã¹ãŠãç¶²çŸ ãããã¿ãŒã³ãå¿ èŠã§ããããšãã°ãä»»æã®å€ã«äžèŽãã倿°åã¯åžžã«æ©èœãããããæ®ãã®ãã¹ãŠã®ã±ãŒã¹ãã«ããŒããŸãã
ç¹å¥ãªãã¿ãŒã³_ã¯äœã«ã§ãäžèŽããŸããã倿°ã«ãã€ã³ããããªããããäžèŽã®æåŸã®ã¹ãªãŒãã§ãã䜿çšãããŸãã_ãã¿ãŒã³ã¯ãããšãã°ãæå®ãããŠããªãå€ãç¡èŠããå Žåã«åœ¹ç«ã¡ãŸãããã¿ãŒã³ã«ã€ããŠã¯ãããã¿ãŒã³å ã®å€ãç¡èŠãããã»ã¯ã·ã§ã³ã§è©³ãã説æããŸãã
æ¡ä»¶ä»ãã®å Žå
第6ç« ã§ã¯ãletã¹ããŒãã¡ã³ããäž»ã«1ã€ã®ã±ãŒã¹ã®ã¿ã«äžèŽããmatchåŒã«çžåœãããã®ãèšè¿°ããçãæ¹æ³ãšããŠäœ¿çšããããã©ããã«ã€ããŠèª¬æããŸããããããã¯ãif letã®ãã¿ãŒã³ãäžèŽããªãå Žåã«å®è¡ããã³ãŒããå«ããäžèŽããelseãæã€ããšãã§ããŸãã
ãªã¹ã18.1ã¯ãif letãelse ifãelse ifletã¹ããŒãã¡ã³ããçµã¿åãããŠäœ¿çšââããããšãå¯èœã§ããããšã瀺ããŠããŸããããã«ããããã¿ãŒã³ãšæ¯èŒããããã«1ã€ã®å€ãã衚çŸã§ããªãäžèŽåŒã䜿çšãããããæè»æ§ãé«ããªããŸããããã«ãäžé£ã®if letãelse ifãelse if letã¹ããŒãã¡ã³ãã®æ¡ä»¶ã¯ãçžäºã«åç §ããå¿ èŠã¯ãããŸããã
ãªã¹ã18.1ã®ã³ãŒãã¯ãèæ¯è²ã決å®ããè€æ°ã®æ¡ä»¶ã«å¯Ÿããäžé£ã®ãã¹ãã瀺ããŠããŸãããã®äŸã§ã¯ãå®éã®ããã°ã©ã ããŠãŒã¶ãŒå ¥åããååŸã§ããããŒãã³ãŒããããå€ã䜿çšããŠå€æ°ãäœæããŸããã
ãªã¹ã18.1 letãelse ifãelse if letãelseã¹ããŒãã¡ã³ãã®æ··å
src/main.rs
fn main() {
let favorite_color: Option<&str> = None;
let is_tuesday = false;
let age: Result<u8, _> = "34".parse();
(1) if let Some(color) = favorite_color {
(2) println!(" , {}, ", color);
(3) } else if is_tuesday {
(4) println!(" - !");
(5) } else if let Ok(age) = age {
(6) if age > 30 {
(7) println!(" ");
} else {
(8) println!(" ");
}
(9) } else {
(10) println!(" ");
}
}
ãŠãŒã¶ãŒã奜ããªè²ïŒ1ïŒãæå®ããå Žåãããã¯èæ¯è²ïŒ2ïŒã§ãã仿¥ãç«ææ¥ïŒ3ïŒã®å Žåãèæ¯è²ã¯ç·ïŒ4ïŒã§ãããŠãŒã¶ãŒã幎霢ãæååãšããŠæå®ãããããæ°å€ïŒ5ïŒãšããŠæ£åžžã«è§£æã§ããå Žåãæ°å€ïŒ6ïŒã®å€ã«å¿ããŠãè²ã¯çŽ«ïŒ7ïŒãŸãã¯ãªã¬ã³ãžïŒ8ïŒã®ããããã«ãªããŸãããããã®æ¡ä»¶ã®ãããã«ãåœãŠã¯ãŸããªãå ŽåïŒ9ïŒãèæ¯è²ã¯éã§ãïŒ10ïŒã
ãã®æ¡ä»¶ä»ãæ§é ã«ãããè€éãªèŠä»¶ãå¯èœã«ãªããŸããããã«ããŒãã³ãŒããããå€ã䜿çšãããšããã®äŸã¯æ¬¡ã®ããã«åºåãããŸã
.
if letåŒã§ããmatchåŒã®ã¹ãªãŒããšåãæ¹æ³ã§ã·ã§ãŒãã£ã³ã°å€æ°ãå°å ¥ã§ããããšãããããŸããifletOkïŒageïŒ= ageïŒ5ïŒã³ãŒãè¡ã¯ãOkããªã¢ã³ãå ã®å€ãå«ãæ°ããã·ã§ãŒãã£ã³ã°å€æ°ageãå°å ¥ããŸããããã¯ããã®ãããã¯ïŒ6ïŒã«å¹Žéœ¢> 30ã®å Žåã®æ¡ä»¶ãå ¥åããå¿ èŠãããããšãæå³ããŸããOkïŒå¹Žéœ¢ïŒ=幎霢&&幎霢> 30ã®å Žåãã¹ããŒãã¡ã³ãã§ããã2ã€ã®æ¡ä»¶ãçµã¿åãããããšãã§ããŸããã30ãšæ¯èŒãã圱ä»ãã®å¯å€å¹Žéœ¢ãæ°ããã¹ã³ãŒããäžæ¬åŒ§ã§å§ãŸããŸã§ç¡å¹ã«ãªããŸãã
if letã¹ããŒãã¡ã³ãã䜿çšããããšã®æ¬ ç¹ã¯ãã³ã³ãã€ã©ãŒãå®å šæ§ããã§ãã¯ããªãã®ã«å¯Ÿããmatchã¹ããŒãã¡ã³ãããã§ãã¯ããããšã§ããæåŸã®elseïŒ9ïŒãããã¯ãã¹ãããããŠããããã£ãŠããã€ãã®ã±ãŒã¹ãåŠçããå Žåãã³ã³ãã€ã©ãŒã¯è«çãšã©ãŒã®å¯èœæ§ã«ã€ããŠèŠåããŸããã§ããã
æ¡ä»¶ä»ãã«ãŒãããããªãã
èšèšã¯ifletã¹ããŒãã¡ã³ããšåæ§ã§ãwhile letæ¡ä»¶ä»ãã«ãŒãã䜿çšãããšããã¿ãŒã³ãäžèŽããéãwhileã«ãŒããå®è¡ã§ããŸãããªã¹ã18.2ã®äŸã¯ããã¯ãã«ãã¹ã¿ãã¯ãšããŠäœ¿çšãã远å ãããé åºãšã¯éã®é åºã§ãã¯ãã«ã®å€ãåºåããwhileletã«ãŒãã瀺ããŠããŸãã
ãªã¹ã18.2 whileletã«ãŒãã䜿çšããŠå€ãåºåããŸãwhilestack.popïŒïŒã¯Someãè¿ããŸã
let mut stack = Vec::new();
stack.push(1);
stack.push(2);
stack.push(3);
while let Some(top) = stack.pop() {
println!("{}", top);
}
ãã®äŸã§ã¯ã3ã2ãæ¬¡ã«1ãåºåããŸããpopã¡ãœããã¯ãVectorããæåŸã®èŠçŽ ãååŸããSomeïŒå€ïŒãè¿ããŸãããã¯ãã«ã空ã®å Žåãpopã¯Noneãè¿ããŸããwhileã«ãŒãã¯ãpopãSomeãè¿ããŸã§ããããã¯å ã®ã³ãŒããå®è¡ãç¶ããŸããpopãNoneãè¿ããšãã«ãŒãã¯åæ¢ããŸããwhile letæ¡ä»¶ä»ãã«ãŒãã䜿çšããŠãã¹ã¿ãã¯ããåã¢ã€ãã ãåé€ã§ããŸãã
ã«ãŒãã®å Žå
第3ç« ã§ã¯ãforã«ãŒããRustã³ãŒãã§æãäžè¬çãªã«ãŒãæ§é ã§ãããšè¿°ã¹ãŸããããforãåããã¿ãŒã³ã«ã€ããŠã¯ãŸã 説æããŠããŸãããforã«ãŒãã§ã¯ããã¿ãŒã³ã¯forããŒã¯ãŒãã®çŽåŸã®å€ã§ãããããyã®for xã§ã¯ããã¿ãŒã³ã¯xã§ãã
ãªã¹ã18.3ã¯ãforã«ãŒãå ã®ãã¿ãŒã³ã䜿çšããŠãforå ã®ã¿ãã«ãåè§£ãŸãã¯åè§£ããæ¹æ³ã瀺ããŠããŸãã
ãªã¹ã18.3ãforã«ãŒãã§ãã¿ãŒã³ã䜿çšããŠã¿ãã«ãåè§£ãã
let v = vec!['a', 'b', 'c'];
for (index, value) in v.iter().enumerate() {
println!("{} {}", value, index);
}
ãªã¹ã18.3ã®ã³ãŒãã¯ã以äžã衚瀺ããŸãã
0
b 1
2
enumerateã¡ãœããã䜿çšããŠã€ãã¬ãŒã¿ãŒãåäœæããã¿ãã«ã«é 眮ãããã€ãã¬ãŒã¿ãŒã§ãã®å€ã®å€ãšã€ã³ããã¯ã¹ãçæããŸããenumerateã¡ãœãããæåã«åŒã³åºããšãã¿ãã«ïŒ0ã 'a'ïŒãçæãããŸãããã®å€ãïŒindexãvalueïŒãã¿ãŒã³ãšçµã¿åããããšãindexã¯0ãvalue㯠'a'ã«ãªããããŒã¿ã®æåã®è¡ãåºåãããŸãã
ã¹ããŒãã¡ã³ããããŸããã
ãã®ç« ã®åã«ãmatchããã³if letã¹ããŒãã¡ã³ãã§ã®ã¿ãã¿ãŒã³ã䜿çšããããšã«ã€ããŠçŽæ¥èª¬æããŸããããå®éã«ã¯ãletã¹ããŒãã¡ã³ããå«ãä»ã®å Žæã§ãã¿ãŒã³ã䜿çšããŸãããletã䜿çšããŠå€æ°ã®å€ãæž¡ãç°¡åãªæ¹æ³ãèããŠã¿ãŸãããã
let x = 5;
ãã®æ¬ã§ã¯ããã®çš®ã®letã¹ããŒãã¡ã³ããäœçŸåã䜿çšããŠããŸãããæ°ä»ããŠããªããããããŸãããããã¿ãŒã³ã䜿çšããŠããŸããããæ£åŒã«ã¯ãletã¹ããŒãã¡ã³ãã¯æ¬¡ã®ããã«ãªããŸãã
let = ;
let x = 5;ã®ãããªã¹ããŒãã¡ã³ãã§ã¯ãPATTERNã¹ãããã«å€æ°åãããã倿°åã¯ãã¿ãŒã³ã®åçŽãªåœ¢åŒã«ãããŸããã Rustã¯åŒããã¿ãŒã³ãšæ¯èŒããèŠã€ãã£ãååãå²ãåœãŠãŸãããããã£ãŠããã®äŸã§ã¯x = 5ãšããŸãããã¿ãŒã³ã¯xã§ããããã¯ããããã§äžèŽãããã®ã倿°xã«é¢é£ä»ãããããšãæå³ããŸãã xãšããååã¯ãã¿ãŒã³å šäœã衚ãããããã®ãã¿ãŒã³ã¯äºå®äžããå€ã«é¢ä¿ãªãããã¹ãŠã倿°xã«ãã€ã³ããããããšãæå³ããŸãã
letã¹ããŒãã¡ã³ããã¿ãŒã³ã«å¯Ÿãããããã³ã°ãããæç¢ºã«ç¢ºèªããã«ã¯ãletãã¿ãŒã³ã䜿çšããŠã¿ãã«ãåè§£ãããªã¹ã18.4ãæ€èšããŠãã ããã
ãªã¹ã18.4ããã¿ãŒã³ã䜿çšããŠã¿ãã«ãåè§£ããäžåºŠã«3ã€ã®å€æ°ãäœæãã
let (x, y, z) = (1, 2, 3);
ããã§ã¯ãã¿ãã«ããã¿ãŒã³ã«ãããã³ã°ããŠããŸããRustã¯ïŒ1ã2ã3ïŒãïŒxãyãzïŒãšæ¯èŒãããã®å€ããã¿ãŒã³ãšäžèŽããããšã確èªããŸãããããã£ãŠãRustã¯1ãxã«ã2ãyã«ã3ãzã«é¢é£ä»ããŸãããã®ã¿ãã«ãã¿ãŒã³ã¯ã3ã€ã®å¥ã ã®å¯å€ãã¿ãŒã³ããã¹ããããã®ãšèããããšãã§ããŸãã
ãã¿ãŒã³å ã®èŠçŽ ã®æ°ãã¿ãã«å ã®èŠçŽ ã®æ°ãšäžèŽããªãå Žåãéèšã¿ã€ãã¯äžèŽãããã³ã³ãã€ã©ãšã©ãŒãçºçããŸããããšãã°ããªã¹ã18.5ã¯ã3ã€ã®ã¿ãã«ã2ã€ã®å€æ°ã«åè§£ããããšãã詊ã¿ã瀺ããŠããŸãããããã¯æ©èœããŸããã
ãªã¹ã18.5ã倿°ãã¿ãã«å ã®èŠçŽ ã®æ°ãšäžèŽããªããã¿ãŒã³ã®èª€ã£ãæ§æ
let (x, y) = (1, 2, 3);
ãã®ã³ãŒããã³ã³ãã€ã«ããããšãããšã次ã®ãããªãšã©ãŒãçºçããŸãã
error[E0308]: mismatched types
--> src/main.rs:2:9
|
2 | let (x, y) = (1, 2, 3);
| ^^^^^^ expected a tuple with 3 elements, found one with 2 elements
|
= note: expected type `({integer}, {integer}, {integer})`
found type `(_, _)`
ã¿ãã«å ã®1ã€ä»¥äžã®å€ãç¡èŠããå Žåã¯ãããã¿ãŒã³å ã®å€ãç¡èŠãããã®ã»ã¯ã·ã§ã³ã§èª¬æããããã«ã_ãŸãã¯..ã䜿çšã§ããŸãããã¿ãŒã³å ã®å€æ°ãå€ãããããšãåé¡ã§ããå Žåã¯ã倿°ã®æ°ãã¿ãã«ã®èŠçŽ ã®æ°ãšçãããªãããã«å€æ°ãåé€ããŠãã¿ã€ããäžèŽãããå¿ èŠããããŸãã
æ©èœãã©ã¡ãŒã¿
颿°ãã©ã¡ãŒã¿ãŒã¯ãã¿ãŒã³ã«ããããšãã§ããŸããã¿ã€ãi32ã®1ã€ã®ãã©ã¡ãŒã¿ãŒxãåãåã颿°fooã宣èšãããªã¹ã18.6ã®ã³ãŒãã¯ãä»ã§ã¯ããªãã¿ã§ãã
ãªã¹ã18.6ã颿°çœ²åã¯ãã©ã¡ãŒã¿ãŒã®ãã¿ãŒã³ã䜿çšããŸã
fn foo(x: i32) {
//
}
ããŒãxã¯ãã¿ãŒã³ã§ãïŒletãšåæ§ã«ã颿°åŒæ°ã®ã¿ãã«ããã¿ãŒã³ã«äžèŽãããããšãã§ããŸãããªã¹ã18.7ã¯ã颿°å ã§ã¿ãã«ãæž¡ããšãã«ã¿ãã«ã®å€ãåå²ããŸãã
ãªã¹ã18.7ãã¿ãã«ãåè§£ãããã©ã¡ãŒã¿ãæã€é¢æ°
src/main.rs
fn print_coordinates(&(x, y): &(i32, i32)) {
println!(" : ({}, {})", x, y);
}
fn main() {
let point = (3, 5);
print_coordinates(&point);
}
ãã®ã³ãŒãã¯åºåããŸã
: (3, 5)
å€ïŒïŒ3ã5ïŒã¯ãã¿ãŒã³ïŒïŒxãyïŒãšäžèŽãããããxã¯3ãyã¯5ã§ãã
ããã«ã颿°ãã©ã¡ãŒã¿ãŒãªã¹ããšåãããã«ãã¯ããŒãžã£ãŒãã©ã¡ãŒã¿ãŒãªã¹ãã§ãã¿ãŒã³ã䜿çšã§ããŸããã¯ããŒãžã£ãŒã¯ã第13ç« ã§èª¬æããããã«ã颿°ã«äŒŒãŠããŸãã
ãã¿ãŒã³ã䜿çšããããã€ãã®æ¹æ³ããã§ã«èŠãŠããŸãããããããã䜿çšã§ãããã¹ãŠã®å Žæã§åãããã«æ©èœããããã§ã¯ãããŸãããç¶æ³ã«ãã£ãŠã¯ããããã®ãã¿ãŒã³ã¯åé§ã§ããªããã®ã§ãªããã°ãªããŸãããä»ã®ç¶æ³ã§ã¯ãåé§ã§ããå ŽåããããŸãããããã®2ã€ã®æŠå¿µã«ã€ããŠä»¥äžã§èª¬æããŸãã
åé§å¯èœæ§ïŒãã¿ãŒã³ã®äžäžèŽã®å¯èœæ§
ãã¿ãŒã³ã«ã¯ãåé§å¯èœãªãã®ãšåé§ã§ããªããã®ã®2çš®é¡ããããŸããæž¡ãããå¯èœãªå€ã«äžèŽãããã¿ãŒã³ã¯åé§ã§ããŸãããäŸãšããŠãlet x = 5;ã¹ããŒãã¡ã³ãã®xããããŸããããã¯ãxããã¹ãŠã«å®å šã«äžèŽãããããäžèŽããããåŸãªãããã§ããèããããæå³ã®ããã€ããšäžèŽããªããã¿ãŒã³ã¯åé§å¯èœã§ããäŸãšããŠãif let SomeïŒxïŒ= a_valueã¹ããŒãã¡ã³ãã®SomeïŒxïŒããããŸããããã¯ãa_valueã®å€ãNoneã§ãããSomeã§ã¯ãªãå ŽåãSomeïŒxïŒãäžèŽããªãããã§ãã
å€ãäžèŽããªãå Žåãããã°ã©ã ã¯æå³ã®ããããšãäœãã§ããªãããã颿°ãã©ã¡ãŒã¿ãŒãletã¹ããŒãã¡ã³ããããã³forã«ãŒãã¯åé§ã§ããªããã¿ãŒã³ã®ã¿ãåãå ¥ããããšãã§ããŸãã ifletããã³whileletåŒã¯ãå®çŸ©äžãçºçããå¯èœæ§ã®ãããšã©ãŒãåŠçããããã«èšèšãããŠãããããå蚌å¯èœãªãã¿ãŒã³ã®ã¿ãåãå ¥ããŸããæ¡ä»¶åŒã®æ©èœã¯ãæåãŸãã¯å€±æã«å¿ããŠç°ãªãã¢ã¯ã·ã§ã³ãå®è¡ããæ©èœã§ãã
äžè¬ã«ãåé§ã§ããªããã¿ãŒã³ãšåé§ã§ããªããã¿ãŒã³ã®éãã«ã€ããŠå¿é ããå¿ èŠã¯ãããŸããããã ãããšã©ãŒã¡ãã»ãŒãžã«è¡šç€ºããããšãã«å¯Ÿå¿ããã«ã¯ãåè«å¯èœæ§ã®æŠå¿µã«æ³šæããå¿ èŠããããŸãããã®ãããªå Žåãã³ãŒãã®æå³ãããåäœã«å¿ããŠããã¿ãŒã³ãŸãã¯ãã¿ãŒã³ã䜿çšããŠããæ§æã®ããããã倿Žããå¿ èŠããããŸãã
Rustãåé§ã§ããªããã¿ãŒã³ãå¿ èŠãšããå Žæã§åé§ã§ããªããã¿ãŒã³ã䜿ãããšãããšã©ããªããããŸãã¯ãã®éãèŠãŠã¿ãŸãããããªã¹ã18.8ã¯letã¹ããŒãã¡ã³ãã瀺ããŠããŸãããSomeïŒxïŒãæå®ãããã¿ãŒã³ã«ã¯ãåè«å¯èœãªãã¿ãŒã³ã§ãããæ³åã®ãšããããã®ã³ãŒãã¯ã³ã³ãã€ã«ãããŸããã
ãªã¹ã18.8ãletã§åè«å¯èœãªãã¿ãŒã³ã䜿ãããšããŠããŸã
let Some(x) = some_option_value;
some_option_valueãNoneã«çããå ŽåãSomeïŒxïŒãã¿ãŒã³ãšäžèŽããŸãããã€ãŸãããã¿ãŒã³ã¯åé§å¯èœã§ãããã ããletã¹ããŒãã¡ã³ãã¯ãå€Noneã§æå¹ãªããšãäœãå®è¡ã§ããªããããåé§ã§ããªããã¿ãŒã³ã®ã¿ãåãå ¥ããããšãã§ããŸããã³ã³ãã€ã«æã«ãRustã¯ãåé§ã§ããªããã¿ãŒã³ãå¿ èŠãªå Žåã«åé§å¯èœãªãã¿ãŒã³ã䜿çšããããšãããšæå¥ãèšããŸãã
error[E0005]: refutable pattern in local binding: `None` not covered
-->
|
3 | let Some(x) = some_option_value;
| ^^^^^^^ pattern `None` not covered
ãã¹ãŠã®æå¹ãªå€ãSomeïŒxïŒãã¿ãŒã³ã§ã«ããŒããŠããªãïŒãããŠã«ããŒã§ããªãã£ãïŒãããRustã¯åœç¶ã³ã³ãã€ã©ãšã©ãŒãã¹ããŒããŠããŸãã
åé§ã§ããªããã¿ãŒã³ã§ã¯ãªãåé§å¯èœãªãã¿ãŒã³ãããå Žåã®åé¡ãä¿®æ£ããããã«ããã¿ãŒã³ã䜿çšããã³ãŒãã倿Žã§ããŸããletã®ä»£ããã«ãifletã䜿çšã§ããŸããæ¬¡ã«ããã¿ãŒã³ãäžèŽããªãå Žåãäžæ¬åŒ§å ã®ã³ãŒãã¯ã¹ããããããäœæ¥ã¯æ£ããç¶è¡ãããŸãããªã¹ã18.9ã¯ããªã¹ã18.8ã®ã³ãŒããä¿®æ£ããæ¹æ³ã瀺ããŠããŸãã
ãªã¹ã18.9ã letã®ä»£ããã«ifletã¹ããŒãã¡ã³ããšåè«å¯èœãªãã¿ãŒã³ãããã¯ã䜿çšãã
if let Some(x) = some_option_value {
println!("{}", x);
}
ã³ãŒãã®æºåãã§ããŸããïŒããã¯çµ¶å¯Ÿã«æ£ããã³ãŒãã§ããããšã©ãŒãªãã§åé§ã§ããªããã¿ãŒã³ã䜿çšããããšã¯ã§ããŸããããªã¹ã18-10ã«ç€ºãããã«ãif letåŒã«xãªã©ã®åžžã«äžèŽãããã¿ãŒã³ãæå®ãããšãã³ã³ãã€ã«ãããŸããã
ãªã¹ã18.10ãifletã¹ããŒãã¡ã³ãã§åé§ã§ããªããã¿ãŒã³ã䜿çšããããšããŠããŸã
if let x = 5 {
println!("{}", x);
};
ã³ã³ãã€ã©ã¯ãåé§ã§ããªããã¿ãŒã³ã§ifletåŒã䜿çšããããšã¯æå³ããªããšæå¥ãèšããŸãã
error[E0162]: irrefutable if-let pattern
--> <anon>:2:8
|
2 | if let x = 5 {
| ^ irrefutable pattern
ãã®ãããäžèŽåŒã®ã¹ãªãŒãã¯ãåé§ã§ããªããã¿ãŒã³ã«å¯ŸããŠæ®ãã®å€ãšäžèŽããå¿ èŠãããæåŸã®ã¹ãªãŒããé€ããŠãåé§å¯èœãªãã¿ãŒã³ã䜿çšããå¿ èŠããããŸããRustã¯ãã¹ãªãŒãã1ã€ãããªãäžèŽåŒã§åé§ã§ããªããã¿ãŒã³ãèš±å¯ããŸããããã®æ§æã¯ç¹ã«æçšã§ã¯ãªããããåçŽãªletã¹ããŒãã¡ã³ãã«çœ®ãæããããšãã§ããŸãã
ãã¿ãŒã³ã䜿çšãããå Žæãšãåé§ã§ããªããã¿ãŒã³ãšåé§ã§ããªããã¿ãŒã³ã®éããããã£ããšããã§ããã¿ãŒã³ã®äœæã«äœ¿çšã§ããæ§æã«ã€ããŠçè§£ããŸãããã
èè ã«ã€ããŠ
Steve Klabnikã¯ãRustããã¥ã¡ã³ãããŒã ãçããŠããããã®èšèªã®äž»èŠãªéçºè ã®1人ã§ãã圌ã¯é »ç¹ã«è¬åž«ãåããå€ãã®ãªãŒãã³ãœãŒã¹ã³ãŒããæžããŠããŸãã以åã¯RubyãRubyonRailsãªã©ã®ãããžã§ã¯ãã«æºãã£ãŠããŸããã
Carol Nicholsã¯ãRust CoreéçºããŒã ã®ã¡ã³ããŒã§ãããäžçåã®Rustã«çŠç¹ãåœãŠããœãããŠã§ã¢éçºã³ã³ãµã«ãã£ã³ã°äŒç€Ÿã§ããInteger 32ãLLCã®å ±åèšç«è ã§ããNicholsã¯ãRustèšèªã«é¢ããRustBeltäŒè°ã®äž»å¬è ã§ãã
»æ¬ã®è©³çްã«ã€ããŠã¯ãåºç瀟ã®Webãµã€ããåç §ããŠãã ãã
Â»ç®æ¬¡
»æç²
ããã¿ã³ã®å Žåãã¯ãŒãã³ã®25ïŒ å²åŒ-é
æ¬ã®çŽçã®æ¯æãæã«ãé»åæžç±ãé»åã¡ãŒã«ã«éä¿¡ãããŸãã