[{"data":1,"prerenderedAt":1715},["ShallowReactive",2],{"page-\u002Frust\u002F06-control-flow":3},{"id":4,"title":5,"body":6,"description":31,"extension":1709,"meta":1710,"navigation":155,"path":1711,"seo":1712,"stem":1713,"__hash__":1714},"content\u002Frust\u002F06-control-flow.md","06 — Control Flow",{"type":7,"value":8,"toc":1684},"minimark",[9,13,22,200,241,281,286,297,380,385,508,521,526,618,624,631,810,822,827,830,933,984,988,1040,1047,1053,1141,1147,1310,1319,1335,1341,1436,1463,1467,1609,1618,1647,1657,1661,1680],[10,11,5],"h1",{"id":12},"_06-control-flow",[14,15,17,21],"h2",{"id":16},"if-expressions",[18,19,20],"code",{},"if"," Expressions",[23,24,26],"code-wrapper",{"language":25},"rust",[27,28,32],"pre",{"className":29,"code":30,"language":25,"meta":31,"style":31},"language-rust shiki shiki-themes github-light github-dark","let n = 5;\nif n > 0 {\n    println!(\"positive\");\n} else if n \u003C 0 {\n    println!(\"negative\");\n} else {\n    println!(\"zero\");\n}\n\nlet sign = if n > 0 { 1 } else { -1 };   \u002F\u002F if is an expression\n","",[18,33,34,57,73,90,111,123,132,144,150,157],{"__ignoreMap":31},[35,36,39,43,47,50,54],"span",{"class":37,"line":38},"line",1,[35,40,42],{"class":41},"svdQ7","let",[35,44,46],{"class":45},"ssxIu"," n ",[35,48,49],{"class":41},"=",[35,51,53],{"class":52},"snvgF"," 5",[35,55,56],{"class":45},";\n",[35,58,60,62,64,67,70],{"class":37,"line":59},2,[35,61,20],{"class":41},[35,63,46],{"class":45},[35,65,66],{"class":41},">",[35,68,69],{"class":52}," 0",[35,71,72],{"class":45}," {\n",[35,74,76,80,83,87],{"class":37,"line":75},3,[35,77,79],{"class":78},"sIsaT","    println!",[35,81,82],{"class":45},"(",[35,84,86],{"class":85},"sJ6F3","\"positive\"",[35,88,89],{"class":45},");\n",[35,91,93,96,99,102,104,107,109],{"class":37,"line":92},4,[35,94,95],{"class":45},"} ",[35,97,98],{"class":41},"else",[35,100,101],{"class":41}," if",[35,103,46],{"class":45},[35,105,106],{"class":41},"\u003C",[35,108,69],{"class":52},[35,110,72],{"class":45},[35,112,114,116,118,121],{"class":37,"line":113},5,[35,115,79],{"class":78},[35,117,82],{"class":45},[35,119,120],{"class":85},"\"negative\"",[35,122,89],{"class":45},[35,124,126,128,130],{"class":37,"line":125},6,[35,127,95],{"class":45},[35,129,98],{"class":41},[35,131,72],{"class":45},[35,133,135,137,139,142],{"class":37,"line":134},7,[35,136,79],{"class":78},[35,138,82],{"class":45},[35,140,141],{"class":85},"\"zero\"",[35,143,89],{"class":45},[35,145,147],{"class":37,"line":146},8,[35,148,149],{"class":45},"}\n",[35,151,153],{"class":37,"line":152},9,[35,154,156],{"emptyLinePlaceholder":155},true,"\n",[35,158,160,162,165,167,169,171,173,175,178,181,184,186,188,191,193,196],{"class":37,"line":159},10,[35,161,42],{"class":41},[35,163,164],{"class":45}," sign ",[35,166,49],{"class":41},[35,168,101],{"class":41},[35,170,46],{"class":45},[35,172,66],{"class":41},[35,174,69],{"class":52},[35,176,177],{"class":45}," { ",[35,179,180],{"class":52},"1",[35,182,183],{"class":45}," } ",[35,185,98],{"class":41},[35,187,177],{"class":45},[35,189,190],{"class":41},"-",[35,192,180],{"class":52},[35,194,195],{"class":45}," };   ",[35,197,199],{"class":198},"sdCPZ","\u002F\u002F if is an expression\n",[201,202,203,216,235],"ul",{},[204,205,206,207,211,212,215],"li",{},"Branches must return the ",[208,209,210],"strong",{},"same type"," (or ",[18,213,214],{},"!",").",[204,217,218,219,222,223,226,227,230,231,234],{},"The condition must be a ",[18,220,221],{},"bool"," — no truthy integers, no ",[18,224,225],{},"if x { }"," where ",[18,228,229],{},"x"," is ",[18,232,233],{},"i32",".",[204,236,237,240],{},[18,238,239],{},"if let"," combines pattern match + branch.",[23,242,243],{"language":25},[27,244,246],{"className":29,"code":245,"language":25,"meta":31,"style":31},"if let Some(v) = opt {\n    println!(\"{v}\");\n}\n",[18,247,248,266,277],{"__ignoreMap":31},[35,249,250,252,255,258,261,263],{"class":37,"line":38},[35,251,20],{"class":41},[35,253,254],{"class":41}," let",[35,256,257],{"class":78}," Some",[35,259,260],{"class":45},"(v) ",[35,262,49],{"class":41},[35,264,265],{"class":45}," opt {\n",[35,267,268,270,272,275],{"class":37,"line":59},[35,269,79],{"class":78},[35,271,82],{"class":45},[35,273,274],{"class":85},"\"{v}\"",[35,276,89],{"class":45},[35,278,279],{"class":37,"line":75},[35,280,149],{"class":45},[14,282,284],{"id":283},"loop",[18,285,283],{},[287,288,289,290,293,294,296],"p",{},"Infinite loop until ",[18,291,292],{},"break",". ",[18,295,292],{}," can return a value:",[23,298,299],{"language":25},[27,300,302],{"className":29,"code":301,"language":25,"meta":31,"style":31},"let mut i = 0;\nlet result = loop {\n    if i == 10 { break i * 2; }\n    i += 1;\n};\n",[18,303,304,320,334,362,375],{"__ignoreMap":31},[35,305,306,308,311,314,316,318],{"class":37,"line":38},[35,307,42],{"class":41},[35,309,310],{"class":41}," mut",[35,312,313],{"class":45}," i ",[35,315,49],{"class":41},[35,317,69],{"class":52},[35,319,56],{"class":45},[35,321,322,324,327,329,332],{"class":37,"line":59},[35,323,42],{"class":41},[35,325,326],{"class":45}," result ",[35,328,49],{"class":41},[35,330,331],{"class":41}," loop",[35,333,72],{"class":45},[35,335,336,339,341,344,347,349,351,353,356,359],{"class":37,"line":75},[35,337,338],{"class":41},"    if",[35,340,313],{"class":45},[35,342,343],{"class":41},"==",[35,345,346],{"class":52}," 10",[35,348,177],{"class":45},[35,350,292],{"class":41},[35,352,313],{"class":45},[35,354,355],{"class":41},"*",[35,357,358],{"class":52}," 2",[35,360,361],{"class":45},"; }\n",[35,363,364,367,370,373],{"class":37,"line":92},[35,365,366],{"class":45},"    i ",[35,368,369],{"class":41},"+=",[35,371,372],{"class":52}," 1",[35,374,56],{"class":45},[35,376,377],{"class":37,"line":113},[35,378,379],{"class":45},"};\n",[381,382,384],"h3",{"id":383},"labeled-loops","Labeled Loops",[23,386,387],{"language":25},[27,388,390],{"className":29,"code":389,"language":25,"meta":31,"style":31},"'outer: for i in 0..3 {\n    for j in 0..3 {\n        if i == j { continue 'outer; }\n        if i + j > 3 { break 'outer; }\n        println!(\"{i},{j}\");\n    }\n}\n",[18,391,392,421,439,461,487,499,504],{"__ignoreMap":31},[35,393,394,397,400,403,406,408,411,413,416,419],{"class":37,"line":38},[35,395,396],{"class":45},"'",[35,398,399],{"class":78},"outer",[35,401,402],{"class":41},":",[35,404,405],{"class":41}," for",[35,407,313],{"class":45},[35,409,410],{"class":41},"in",[35,412,69],{"class":52},[35,414,415],{"class":41},"..",[35,417,418],{"class":52},"3",[35,420,72],{"class":45},[35,422,423,426,429,431,433,435,437],{"class":37,"line":59},[35,424,425],{"class":41},"    for",[35,427,428],{"class":45}," j ",[35,430,410],{"class":41},[35,432,69],{"class":52},[35,434,415],{"class":41},[35,436,418],{"class":52},[35,438,72],{"class":45},[35,440,441,444,446,448,451,454,457,459],{"class":37,"line":75},[35,442,443],{"class":41},"        if",[35,445,313],{"class":45},[35,447,343],{"class":41},[35,449,450],{"class":45}," j { ",[35,452,453],{"class":41},"continue",[35,455,456],{"class":45}," '",[35,458,399],{"class":78},[35,460,361],{"class":45},[35,462,463,465,467,470,472,474,477,479,481,483,485],{"class":37,"line":92},[35,464,443],{"class":41},[35,466,313],{"class":45},[35,468,469],{"class":41},"+",[35,471,428],{"class":45},[35,473,66],{"class":41},[35,475,476],{"class":52}," 3",[35,478,177],{"class":45},[35,480,292],{"class":41},[35,482,456],{"class":45},[35,484,399],{"class":78},[35,486,361],{"class":45},[35,488,489,492,494,497],{"class":37,"line":113},[35,490,491],{"class":78},"        println!",[35,493,82],{"class":45},[35,495,496],{"class":85},"\"{i},{j}\"",[35,498,89],{"class":45},[35,500,501],{"class":37,"line":125},[35,502,503],{"class":45},"    }\n",[35,505,506],{"class":37,"line":134},[35,507,149],{"class":45},[287,509,510,511,293,513,516,517,520],{},"Labels start with ",[18,512,396],{},[18,514,515],{},"break 'label"," and ",[18,518,519],{},"continue 'label"," control the outer loop.",[14,522,524],{"id":523},"while",[18,525,523],{},[23,527,528],{"language":25},[27,529,531],{"className":29,"code":530,"language":25,"meta":31,"style":31},"let mut n = 5;\nwhile n > 0 {\n    n -= 1;\n}\n\nwhile let Some(x) = stack.pop() {\n    println!(\"{x}\");\n}\n",[18,532,533,547,559,571,575,579,603,614],{"__ignoreMap":31},[35,534,535,537,539,541,543,545],{"class":37,"line":38},[35,536,42],{"class":41},[35,538,310],{"class":41},[35,540,46],{"class":45},[35,542,49],{"class":41},[35,544,53],{"class":52},[35,546,56],{"class":45},[35,548,549,551,553,555,557],{"class":37,"line":59},[35,550,523],{"class":41},[35,552,46],{"class":45},[35,554,66],{"class":41},[35,556,69],{"class":52},[35,558,72],{"class":45},[35,560,561,564,567,569],{"class":37,"line":75},[35,562,563],{"class":45},"    n ",[35,565,566],{"class":41},"-=",[35,568,372],{"class":52},[35,570,56],{"class":45},[35,572,573],{"class":37,"line":92},[35,574,149],{"class":45},[35,576,577],{"class":37,"line":113},[35,578,156],{"emptyLinePlaceholder":155},[35,580,581,583,585,587,590,592,595,597,600],{"class":37,"line":125},[35,582,523],{"class":41},[35,584,254],{"class":41},[35,586,257],{"class":78},[35,588,589],{"class":45},"(x) ",[35,591,49],{"class":41},[35,593,594],{"class":45}," stack",[35,596,234],{"class":41},[35,598,599],{"class":78},"pop",[35,601,602],{"class":45},"() {\n",[35,604,605,607,609,612],{"class":37,"line":134},[35,606,79],{"class":78},[35,608,82],{"class":45},[35,610,611],{"class":85},"\"{x}\"",[35,613,89],{"class":45},[35,615,616],{"class":37,"line":146},[35,617,149],{"class":45},[287,619,620,623],{},[18,621,622],{},"while let"," repeatedly matches; exits when pattern fails.",[14,625,627,630],{"id":626},"for-iterator-based",[18,628,629],{},"for"," (Iterator Based)",[23,632,633],{"language":25},[27,634,636],{"className":29,"code":635,"language":25,"meta":31,"style":31},"for i in 0..5 { print!(\"{i} \"); }        \u002F\u002F 0 1 2 3 4\nfor i in 0..=5 { print!(\"{i} \"); }       \u002F\u002F inclusive 0..5\nfor c in \"abc\".chars() { print!(\"{c}\"); }\nfor b in &[1, 2, 3] { print!(\"{b} \"); }   \u002F\u002F borrows\nfor v in vec![1, 2, 3] { print!(\"{v} \"); } \u002F\u002F consumes\n",[18,637,638,669,698,728,771],{"__ignoreMap":31},[35,639,640,642,644,646,648,650,653,655,658,660,663,666],{"class":37,"line":38},[35,641,629],{"class":41},[35,643,313],{"class":45},[35,645,410],{"class":41},[35,647,69],{"class":52},[35,649,415],{"class":41},[35,651,652],{"class":52},"5",[35,654,177],{"class":45},[35,656,657],{"class":78},"print!",[35,659,82],{"class":45},[35,661,662],{"class":85},"\"{i} \"",[35,664,665],{"class":45},"); }        ",[35,667,668],{"class":198},"\u002F\u002F 0 1 2 3 4\n",[35,670,671,673,675,677,679,682,684,686,688,690,692,695],{"class":37,"line":59},[35,672,629],{"class":41},[35,674,313],{"class":45},[35,676,410],{"class":41},[35,678,69],{"class":52},[35,680,681],{"class":41},"..=",[35,683,652],{"class":52},[35,685,177],{"class":45},[35,687,657],{"class":78},[35,689,82],{"class":45},[35,691,662],{"class":85},[35,693,694],{"class":45},"); }       ",[35,696,697],{"class":198},"\u002F\u002F inclusive 0..5\n",[35,699,700,702,705,707,710,712,715,718,720,722,725],{"class":37,"line":75},[35,701,629],{"class":41},[35,703,704],{"class":45}," c ",[35,706,410],{"class":41},[35,708,709],{"class":85}," \"abc\"",[35,711,234],{"class":41},[35,713,714],{"class":78},"chars",[35,716,717],{"class":45},"() { ",[35,719,657],{"class":78},[35,721,82],{"class":45},[35,723,724],{"class":85},"\"{c}\"",[35,726,727],{"class":45},"); }\n",[35,729,730,732,735,737,740,743,745,748,751,753,755,758,760,762,765,768],{"class":37,"line":92},[35,731,629],{"class":41},[35,733,734],{"class":45}," b ",[35,736,410],{"class":41},[35,738,739],{"class":41}," &",[35,741,742],{"class":45},"[",[35,744,180],{"class":52},[35,746,747],{"class":45},", ",[35,749,750],{"class":52},"2",[35,752,747],{"class":45},[35,754,418],{"class":52},[35,756,757],{"class":45},"] { ",[35,759,657],{"class":78},[35,761,82],{"class":45},[35,763,764],{"class":85},"\"{b} \"",[35,766,767],{"class":45},"); }   ",[35,769,770],{"class":198},"\u002F\u002F borrows\n",[35,772,773,775,778,780,783,785,787,789,791,793,795,797,799,801,804,807],{"class":37,"line":113},[35,774,629],{"class":41},[35,776,777],{"class":45}," v ",[35,779,410],{"class":41},[35,781,782],{"class":78}," vec!",[35,784,742],{"class":45},[35,786,180],{"class":52},[35,788,747],{"class":45},[35,790,750],{"class":52},[35,792,747],{"class":45},[35,794,418],{"class":52},[35,796,757],{"class":45},[35,798,657],{"class":78},[35,800,82],{"class":45},[35,802,803],{"class":85},"\"{v} \"",[35,805,806],{"class":45},"); } ",[35,808,809],{"class":198},"\u002F\u002F consumes\n",[287,811,812,814,815,818,819,821],{},[18,813,629],{}," consumes an ",[18,816,817],{},"IntoIterator",". Arrays implement ",[18,820,817],{}," (by value) since edition 2021.",[14,823,825],{"id":824},"match",[18,826,824],{},[287,828,829],{},"Exhaustive pattern matching. Powerful and central to Rust:",[23,831,832],{"language":25},[27,833,835],{"className":29,"code":834,"language":25,"meta":31,"style":31},"match x {\n    0 => \"zero\",\n    1 | 2 => \"small\",\n    3..=9 => \"medium\",\n    n if n \u003C 100 => \"big\",     \u002F\u002F match guard\n    _ => \"huge\",\n};\n",[18,836,837,844,858,875,892,916,929],{"__ignoreMap":31},[35,838,839,841],{"class":37,"line":38},[35,840,824],{"class":41},[35,842,843],{"class":45}," x {\n",[35,845,846,849,852,855],{"class":37,"line":59},[35,847,848],{"class":52},"    0",[35,850,851],{"class":41}," =>",[35,853,854],{"class":85}," \"zero\"",[35,856,857],{"class":45},",\n",[35,859,860,863,866,868,870,873],{"class":37,"line":75},[35,861,862],{"class":52},"    1",[35,864,865],{"class":41}," |",[35,867,358],{"class":52},[35,869,851],{"class":41},[35,871,872],{"class":85}," \"small\"",[35,874,857],{"class":45},[35,876,877,880,882,885,887,890],{"class":37,"line":92},[35,878,879],{"class":52},"    3",[35,881,681],{"class":41},[35,883,884],{"class":52},"9",[35,886,851],{"class":41},[35,888,889],{"class":85}," \"medium\"",[35,891,857],{"class":45},[35,893,894,896,898,900,902,905,907,910,913],{"class":37,"line":113},[35,895,563],{"class":45},[35,897,20],{"class":41},[35,899,46],{"class":45},[35,901,106],{"class":41},[35,903,904],{"class":52}," 100",[35,906,851],{"class":41},[35,908,909],{"class":85}," \"big\"",[35,911,912],{"class":45},",     ",[35,914,915],{"class":198},"\u002F\u002F match guard\n",[35,917,918,921,924,927],{"class":37,"line":125},[35,919,920],{"class":45},"    _ ",[35,922,923],{"class":41},"=>",[35,925,926],{"class":85}," \"huge\"",[35,928,857],{"class":45},[35,930,931],{"class":37,"line":134},[35,932,379],{"class":45},[201,934,935,942,945,948,954,964,974],{},[204,936,937,938,941],{},"Must be exhaustive; ",[18,939,940],{},"_"," is the wildcard.",[204,943,944],{},"Arms evaluate to a single common type.",[204,946,947],{},"Order matters; first matching arm wins.",[204,949,950,951,234],{},"Multiple patterns with ",[18,952,953],{},"|",[204,955,956,957,959,960,963],{},"Ranges with ",[18,958,681],{}," (only for ",[18,961,962],{},"char"," and numeric types).",[204,965,966,969,970,973],{},[208,967,968],{},"Match guards"," (",[18,971,972],{},"if cond",") enable extra conditions but can prevent exhaustiveness analysis.",[204,975,976,977,980,981,234],{},"Binding with ",[18,978,979],{},"@",": ",[18,982,983],{},"Some(n @ 1..=10) => n",[381,985,987],{"id":986},"binding-modes-2021-edition","Binding Modes (2021 edition)",[23,989,990],{"language":25},[27,991,993],{"className":29,"code":992,"language":25,"meta":31,"style":31},"match &opt {\n    Some(x) => println!(\"{x}\"),   \u002F\u002F x: &i32 — auto-ref\n    None => {}\n}\n",[18,994,995,1004,1026,1036],{"__ignoreMap":31},[35,996,997,999,1001],{"class":37,"line":38},[35,998,824],{"class":41},[35,1000,739],{"class":41},[35,1002,1003],{"class":45},"opt {\n",[35,1005,1006,1009,1011,1013,1016,1018,1020,1023],{"class":37,"line":59},[35,1007,1008],{"class":78},"    Some",[35,1010,589],{"class":45},[35,1012,923],{"class":41},[35,1014,1015],{"class":78}," println!",[35,1017,82],{"class":45},[35,1019,611],{"class":85},[35,1021,1022],{"class":45},"),   ",[35,1024,1025],{"class":198},"\u002F\u002F x: &i32 — auto-ref\n",[35,1027,1028,1031,1033],{"class":37,"line":75},[35,1029,1030],{"class":78},"    None",[35,1032,851],{"class":41},[35,1034,1035],{"class":45}," {}\n",[35,1037,1038],{"class":37,"line":92},[35,1039,149],{"class":45},[287,1041,1042,1043,1046],{},"The 2021 edition \"default binding modes\" let you avoid writing ",[18,1044,1045],{},"&"," everywhere; the compiler inserts references as needed. This can be subtle — see the Patterns chapter.",[14,1048,1050,1052],{"id":1049},"match-on-references",[18,1051,824],{}," on References",[23,1054,1055],{"language":25},[27,1056,1058],{"className":29,"code":1057,"language":25,"meta":31,"style":31},"match &s {\n    &\"yes\" => 1,\n    _ => 0,\n}\n\u002F\u002F or pattern-match by value of &str (Copy):\nmatch s.as_str() {\n    \"yes\" => 1,\n    _ => 0,\n}\n",[18,1059,1060,1069,1083,1093,1097,1102,1116,1127,1137],{"__ignoreMap":31},[35,1061,1062,1064,1066],{"class":37,"line":38},[35,1063,824],{"class":41},[35,1065,739],{"class":41},[35,1067,1068],{"class":45},"s {\n",[35,1070,1071,1074,1077,1079,1081],{"class":37,"line":59},[35,1072,1073],{"class":41},"    &",[35,1075,1076],{"class":85},"\"yes\"",[35,1078,851],{"class":41},[35,1080,372],{"class":52},[35,1082,857],{"class":45},[35,1084,1085,1087,1089,1091],{"class":37,"line":75},[35,1086,920],{"class":45},[35,1088,923],{"class":41},[35,1090,69],{"class":52},[35,1092,857],{"class":45},[35,1094,1095],{"class":37,"line":92},[35,1096,149],{"class":45},[35,1098,1099],{"class":37,"line":113},[35,1100,1101],{"class":198},"\u002F\u002F or pattern-match by value of &str (Copy):\n",[35,1103,1104,1106,1109,1111,1114],{"class":37,"line":125},[35,1105,824],{"class":41},[35,1107,1108],{"class":45}," s",[35,1110,234],{"class":41},[35,1112,1113],{"class":78},"as_str",[35,1115,602],{"class":45},[35,1117,1118,1121,1123,1125],{"class":37,"line":134},[35,1119,1120],{"class":85},"    \"yes\"",[35,1122,851],{"class":41},[35,1124,372],{"class":52},[35,1126,857],{"class":45},[35,1128,1129,1131,1133,1135],{"class":37,"line":146},[35,1130,920],{"class":45},[35,1132,923],{"class":41},[35,1134,69],{"class":52},[35,1136,857],{"class":45},[35,1138,1139],{"class":37,"line":152},[35,1140,149],{"class":45},[14,1142,1144,1145],{"id":1143},"destructuring-in-match","Destructuring in ",[18,1146,824],{},[23,1148,1149],{"language":25},[27,1150,1152],{"className":29,"code":1151,"language":25,"meta":31,"style":31},"enum Shape { Circle(f64), Square(f64), Rect(f64, f64) }\nmatch shape {\n    Shape::Circle(r) => 3.14 * r * r,\n    Shape::Square(s) => s * s,\n    Shape::Rect(a, b) if a == b => a * a,    \u002F\u002F guard: catch squares\n    Shape::Rect(a, b) => a * b,\n}\n",[18,1153,1154,1198,1205,1234,1255,1287,1306],{"__ignoreMap":31},[35,1155,1156,1159,1162,1164,1167,1169,1172,1175,1178,1180,1182,1184,1187,1189,1191,1193,1195],{"class":37,"line":38},[35,1157,1158],{"class":41},"enum",[35,1160,1161],{"class":78}," Shape",[35,1163,177],{"class":45},[35,1165,1166],{"class":78},"Circle",[35,1168,82],{"class":45},[35,1170,1171],{"class":78},"f64",[35,1173,1174],{"class":45},"), ",[35,1176,1177],{"class":78},"Square",[35,1179,82],{"class":45},[35,1181,1171],{"class":78},[35,1183,1174],{"class":45},[35,1185,1186],{"class":78},"Rect",[35,1188,82],{"class":45},[35,1190,1171],{"class":78},[35,1192,747],{"class":45},[35,1194,1171],{"class":78},[35,1196,1197],{"class":45},") }\n",[35,1199,1200,1202],{"class":37,"line":59},[35,1201,824],{"class":41},[35,1203,1204],{"class":45}," shape {\n",[35,1206,1207,1210,1213,1215,1218,1220,1223,1226,1229,1231],{"class":37,"line":75},[35,1208,1209],{"class":78},"    Shape",[35,1211,1212],{"class":41},"::",[35,1214,1166],{"class":78},[35,1216,1217],{"class":45},"(r) ",[35,1219,923],{"class":41},[35,1221,1222],{"class":52}," 3.14",[35,1224,1225],{"class":41}," *",[35,1227,1228],{"class":45}," r ",[35,1230,355],{"class":41},[35,1232,1233],{"class":45}," r,\n",[35,1235,1236,1238,1240,1242,1245,1247,1250,1252],{"class":37,"line":92},[35,1237,1209],{"class":78},[35,1239,1212],{"class":41},[35,1241,1177],{"class":78},[35,1243,1244],{"class":45},"(s) ",[35,1246,923],{"class":41},[35,1248,1249],{"class":45}," s ",[35,1251,355],{"class":41},[35,1253,1254],{"class":45}," s,\n",[35,1256,1257,1259,1261,1263,1266,1268,1271,1273,1275,1277,1279,1281,1284],{"class":37,"line":113},[35,1258,1209],{"class":78},[35,1260,1212],{"class":41},[35,1262,1186],{"class":78},[35,1264,1265],{"class":45},"(a, b) ",[35,1267,20],{"class":41},[35,1269,1270],{"class":45}," a ",[35,1272,343],{"class":41},[35,1274,734],{"class":45},[35,1276,923],{"class":41},[35,1278,1270],{"class":45},[35,1280,355],{"class":41},[35,1282,1283],{"class":45}," a,    ",[35,1285,1286],{"class":198},"\u002F\u002F guard: catch squares\n",[35,1288,1289,1291,1293,1295,1297,1299,1301,1303],{"class":37,"line":125},[35,1290,1209],{"class":78},[35,1292,1212],{"class":41},[35,1294,1186],{"class":78},[35,1296,1265],{"class":45},[35,1298,923],{"class":41},[35,1300,1270],{"class":45},[35,1302,355],{"class":41},[35,1304,1305],{"class":45}," b,\n",[35,1307,1308],{"class":37,"line":134},[35,1309,149],{"class":45},[14,1311,1313,1314,1316,1317],{"id":1312},"returning-from-match-vs-break","Returning from ",[18,1315,824],{}," vs ",[18,1318,292],{},[287,1320,1321,1323,1324,747,1327,747,1329,1332,1333,234],{},[18,1322,824],{}," is an expression. To short-circuit, use ",[18,1325,1326],{},"return",[18,1328,292],{},[18,1330,1331],{},"?",", or ",[18,1334,453],{},[14,1336,1338,1340],{"id":1337},"operator-error-propagation",[18,1339,1331],{}," Operator (Error Propagation)",[23,1342,1343],{"language":25},[27,1344,1346],{"className":29,"code":1345,"language":25,"meta":31,"style":31},"fn parse_and_double(s: &str) -> Result\u003Ci32, ParseIntError> {\n    let n: i32 = s.parse()?;\n    Ok(n * 2)\n}\n",[18,1347,1348,1387,1417,1432],{"__ignoreMap":31},[35,1349,1350,1353,1356,1359,1361,1363,1366,1369,1372,1375,1377,1379,1381,1384],{"class":37,"line":38},[35,1351,1352],{"class":41},"fn",[35,1354,1355],{"class":78}," parse_and_double",[35,1357,1358],{"class":45},"(s",[35,1360,402],{"class":41},[35,1362,739],{"class":41},[35,1364,1365],{"class":78},"str",[35,1367,1368],{"class":45},") ",[35,1370,1371],{"class":41},"->",[35,1373,1374],{"class":78}," Result",[35,1376,106],{"class":45},[35,1378,233],{"class":78},[35,1380,747],{"class":45},[35,1382,1383],{"class":78},"ParseIntError",[35,1385,1386],{"class":45},"> {\n",[35,1388,1389,1392,1395,1397,1400,1403,1405,1407,1410,1413,1415],{"class":37,"line":59},[35,1390,1391],{"class":41},"    let",[35,1393,1394],{"class":45}," n",[35,1396,402],{"class":41},[35,1398,1399],{"class":78}," i32",[35,1401,1402],{"class":41}," =",[35,1404,1108],{"class":45},[35,1406,234],{"class":41},[35,1408,1409],{"class":78},"parse",[35,1411,1412],{"class":45},"()",[35,1414,1331],{"class":41},[35,1416,56],{"class":45},[35,1418,1419,1422,1425,1427,1429],{"class":37,"line":75},[35,1420,1421],{"class":78},"    Ok",[35,1423,1424],{"class":45},"(n ",[35,1426,355],{"class":41},[35,1428,358],{"class":52},[35,1430,1431],{"class":45},")\n",[35,1433,1434],{"class":37,"line":92},[35,1435,149],{"class":45},[287,1437,1438,1440,1441,211,1444,1447,1448,1451,1452,1455,1456,1458,1459,1462],{},[18,1439,1331],{}," returns early from the function on ",[18,1442,1443],{},"Err",[18,1445,1446],{},"None"," with ",[18,1449,1450],{},"Option","). Works on anything implementing ",[18,1453,1454],{},"Try"," (stabilized for ",[18,1457,1450],{},"\u002F",[18,1460,1461],{},"Result","). See Error Handling chapter.",[14,1464,1466],{"id":1465},"control-flow-edge-cases","Control-Flow Edge Cases",[201,1468,1469,1483,1497,1511,1522,1536,1544,1561,1571,1588],{},[204,1470,1471,1479,1480,1482],{},[208,1472,1473,1475,1476,1478],{},[18,1474,20],{}," returning ",[18,1477,1412],{}," vs value",": forgetting the trailing expr in one arm gives ",[18,1481,1412],{}," and a type mismatch error.",[204,1484,1485,1490,1491,1493,1494,1496],{},[208,1486,1487,1489],{},[18,1488,292],{}," value type",": every ",[18,1492,292],{}," in the same ",[18,1495,283],{}," must return the same type.",[204,1498,1499,1505,1506,1508,1509,234],{},[208,1500,1501,230,1503],{},[18,1502,453],{},[18,1504,1412],{},": can't use ",[18,1507,453],{}," to return a value from a ",[18,1510,283],{},[204,1512,1513,1518,1519,234],{},[208,1514,1515,1517],{},[18,1516,629],{}," consumes the iterator",": can't easily get the index — use ",[18,1520,1521],{},".enumerate()",[204,1523,1524,980,1530,1532,1533,1535],{},[208,1525,1526,1316,1528],{},[18,1527,622],{},[18,1529,239],{},[18,1531,523],{}," loops; ",[18,1534,20],{}," runs once.",[204,1537,1538,1543],{},[208,1539,1540,1542],{},[18,1541,824],{}," arm trailing comma",": optional but idiomatic.",[204,1545,1546,1552,1553,1556,1557,1560],{},[208,1547,1548,1549,1551],{},"Empty ",[18,1550,824],{}," on a non-exhaustive enum"," across crates requires ",[18,1554,1555],{},"_ => unreachable!()"," because adding variants is a non-breaking change for the upstream crate (unless ",[18,1558,1559],{},"#[non_exhaustive]"," rules apply).",[204,1562,1563,1567,1568,1570],{},[208,1564,1565],{},[18,1566,1559],{}," on an enum forces downstream code to include a ",[18,1569,940],{}," arm even if all current variants are matched (future-proofing).",[204,1572,1573,980,1576,747,1579,1582,1583,516,1585,1587],{},[208,1574,1575],{},"Short-circuit evaluation",[18,1577,1578],{},"&&",[18,1580,1581],{},"||"," short-circuit. ",[18,1584,1045],{},[18,1586,953],{}," are bitwise and don't.",[204,1589,1590,1596,1597,1458,1599,1601,1602,1458,1605,1608],{},[208,1591,1592,1593],{},"No ternary ",[18,1594,1595],{},"?:",": use ",[18,1598,20],{},[18,1600,98],{}," expressions, or ",[18,1603,1604],{},".then()",[18,1606,1607],{},".unwrap_or()"," on bools.",[14,1610,1612,1614,1615],{"id":1611},"if-let-chains-unstable-let-else",[18,1613,239],{}," chains (unstable) \u002F ",[18,1616,1617],{},"let-else",[23,1619,1620],{"language":25},[27,1621,1623],{"className":29,"code":1622,"language":25,"meta":31,"style":31},"let Some(x) = opt else { return; };\n",[18,1624,1625],{"__ignoreMap":31},[35,1626,1627,1629,1631,1633,1635,1638,1640,1642,1644],{"class":37,"line":38},[35,1628,42],{"class":41},[35,1630,257],{"class":78},[35,1632,589],{"class":45},[35,1634,49],{"class":41},[35,1636,1637],{"class":45}," opt ",[35,1639,98],{"class":41},[35,1641,177],{"class":45},[35,1643,1326],{"class":41},[35,1645,1646],{"class":45},"; };\n",[287,1648,1649,1651,1652,1654,1655,234],{},[18,1650,1617],{}," is the idiomatic early-return form. For multiple conditions, use nested ",[18,1653,1617],{}," or a ",[18,1656,824],{},[14,1658,1660],{"id":1659},"summary","Summary",[287,1662,1663,1458,1665,1458,1667,1458,1669,1458,1671,1673,1674,1676,1677,1679],{},[18,1664,20],{},[18,1666,523],{},[18,1668,629],{},[18,1670,283],{},[18,1672,824],{}," are all expressions. ",[18,1675,824],{}," is exhaustive and central. ",[18,1678,1331],{}," propagates errors. Labels disambiguate nested loops. Next: the famous Ownership model.",[1681,1682,1683],"style",{},"html pre.shiki code .svdQ7, html code.shiki .svdQ7{--shiki-default:#D73A49;--shiki-github-dark:#F97583}html pre.shiki code .ssxIu, html code.shiki .ssxIu{--shiki-default:#24292E;--shiki-github-dark:#E1E4E8}html pre.shiki code .snvgF, html code.shiki .snvgF{--shiki-default:#005CC5;--shiki-github-dark:#79B8FF}html pre.shiki code .sIsaT, html code.shiki .sIsaT{--shiki-default:#6F42C1;--shiki-github-dark:#B392F0}html pre.shiki code .sJ6F3, html code.shiki .sJ6F3{--shiki-default:#032F62;--shiki-github-dark:#9ECBFF}html pre.shiki code .sdCPZ, html code.shiki .sdCPZ{--shiki-default:#6A737D;--shiki-github-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .github-dark .shiki span {color: var(--shiki-github-dark);background: var(--shiki-github-dark-bg);font-style: var(--shiki-github-dark-font-style);font-weight: var(--shiki-github-dark-font-weight);text-decoration: var(--shiki-github-dark-text-decoration);}html.github-dark .shiki span {color: var(--shiki-github-dark);background: var(--shiki-github-dark-bg);font-style: var(--shiki-github-dark-font-style);font-weight: var(--shiki-github-dark-font-weight);text-decoration: var(--shiki-github-dark-text-decoration);}",{"title":31,"searchDepth":59,"depth":59,"links":1685},[1686,1688,1691,1692,1694,1697,1699,1701,1703,1705,1706,1708],{"id":16,"depth":59,"text":1687},"if Expressions",{"id":283,"depth":59,"text":283,"children":1689},[1690],{"id":383,"depth":75,"text":384},{"id":523,"depth":59,"text":523},{"id":626,"depth":59,"text":1693},"for (Iterator Based)",{"id":824,"depth":59,"text":824,"children":1695},[1696],{"id":986,"depth":75,"text":987},{"id":1049,"depth":59,"text":1698},"match on References",{"id":1143,"depth":59,"text":1700},"Destructuring in match",{"id":1312,"depth":59,"text":1702},"Returning from match vs break",{"id":1337,"depth":59,"text":1704},"? Operator (Error Propagation)",{"id":1465,"depth":59,"text":1466},{"id":1611,"depth":59,"text":1707},"if let chains (unstable) \u002F let-else",{"id":1659,"depth":59,"text":1660},"md",{},"\u002Frust\u002F06-control-flow",{"title":5,"description":31},"rust\u002F06-control-flow","j8sSz-tEQm4s1BfaBjv0nsgz6qoVbmoeKFDomRf815A",1785944093207]