API Basic ShortCircuit ko - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
AndAlso / OrElse
ClassicUO โข Basic
AndAlso์ OrElse๋ ๋ถํ์ํ ์ค๋ฅธ์ชฝ ํผ์ฐ์ฐ์๋ฅผ ๊ฑด๋๋ฐ๋ฉฐ ์กฐ๊ฑด์ ๊ฒฐํฉํฉ๋๋ค. AndAlso๋ ์ผ์ชฝ์ด ๊ฑฐ์ง์ด๋ฉด, OrElse๋ ์ผ์ชฝ์ด ์ฐธ์ด๋ฉด ์ค๋ฅธ์ชฝ์ ์๋ตํฉ๋๋ค. ๋ฐฐ์ด ์ ๊ทผ์ ๋ณดํธํ๊ฑฐ๋ ๋ถํ์ํ ํธ์ถ์ ํผํ ๋ ์ฌ์ฉํ์ธ์.
์ ํํ ๊ตฌ๋ฌธ
left AndAlso right
left OrElse right
(conditionA OrElse conditionB) AndAlso conditionC
๋งค๊ฐ๋ณ์
leftโ left: ๋จผ์ ํ ๋ฒ ๊ณ์ฐํ๋ ์. Integer ๋๋ Decimal์ 0์ ๊ฑฐ์ง์ด๋ฉฐ 0์ด ์๋ ์๋ ์ฐธ์ ๋๋ค.rightโ right: ํ์ํ ๊ฒฝ์ฐ์๋ง ํ ๋ฒ ๊ณ์ฐํ๋ ์. ์๋ตํ ๋ฐฐ์ด ์ฝ๊ธฐ, ํจ์ ํธ์ถ๊ณผ ๋ถ์์ฉ์ ๋ฐ์ํ์ง ์์ต๋๋ค. ๊ณ์ฐํ๋ ํผ์ฐ์ฐ์๋ ์ซ์์ฌ์ผ ํ๋ฉฐ ๋ฌธ์์ด์ CBool๋ก ๋ช ์์ ์ผ๋ก ๋ณํํ์ธ์.
๋ฐํ๊ฐ
์๋ ํผ์ฐ์ฐ์๊ฐ ์๋ Integer 1(TRUE) ๋๋ 0(FALSE)์ ๋ฐํํฉ๋๋ค. result=1๊ณผ result=TRUE, result=0๊ณผ result=FALSE๋ฅผ ๋์ผํ๊ฒ ์ธ ์ ์์ต๋๋ค. ์ด ์์ง์ ์ฐธ์ 1์ด๋ฉฐ VB.NET ์ซ์ ๋ณํ์ -1์ด ์๋๋๋ค. ์ผ๋ฐ ๊ฐ์๋ ์ฌ์ ํ ๊ฐ์์ด๋ฉฐ ์ด ์ฐ์ฐ์ด ๋ ผ๋ฆฌ ๊ฐ์ ๋ง๋ญ๋๋ค.
๋์
- ๋น๊ต๋ ํผ์ฐ์ฐ์ ์์์ ๊ณ์ฐ๋ฉ๋๋ค. AndAlso๊ฐ OrElse๋ณด๋ค ์ฐ์ ํ๋ฉฐ ๊ฐ์ ์ฐ์ฐ์๋ ์ผ์ชฝ๋ถํฐ ๊ฒฐํฉํฉ๋๋ค. ๊ดํธ๋ก ์์๋ฅผ ๋ฐ๊ฟ ์ ์์ต๋๋ค. ์๋ตํ ์๋ ๊ตฌ๋ฌธ ๋ถ์๊ณผ Option Explicit ๊ฒ์ฌ๋ฅผ ๋ฐ์ต๋๋ค.
- ํธํ์ฑ์ ์ํด ์ฐ์๋ AND/OR/XOR๋ ํผ์ฐ์ฐ์ ์์์ ๊ธฐ์กด์ฒ๋ผ ์ผ์ชฝ๋ถํฐ ์์ชฝ์ ๊ณ์ฐํ ๋ค AndAlso/OrElse๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. TRUE OR FALSE AndAlso FALSE๋ FALSE, TRUE OrElse FALSE AND FALSE๋ TRUE์ ๋๋ค. ํผํฉํ ๋๋ ๊ดํธ๋ฅผ ์ฌ์ฉํ์ธ์. AND, OR, &&, ||๋ ์์ชฝ์ ๊ณ์ฐํฉ๋๋ค.
- ์์ง์ ์ผ์ชฝ ๊ฐ์ ๊ณ์ฐํ๊ณ ์ซ์์ ์ฐธ/๊ฑฐ์ง์ ํ์ธํ ๋ค ๋ ผ๋ฆฌ ๊ฐ์ ๋ฐํํ๊ฑฐ๋ ํ์ํ ์ค๋ฅธ์ชฝ์ ๊ณ์ฐํฉ๋๋ค. ํ์ํ ํผ์ฐ์ฐ์์ ์ค๋ฅ๋ CATCH๋ก ์ ๋ฌ๋๋ฉฐ FINALLY์ ์ผ์ ์ ์ง/์ ์ง ๊ฒ์ฌ๋ ์ ์ง๋ฉ๋๋ค. ํธ์ถ์ ์๋ตํ๋ฉด ํด๋น ํธ์ถ์ ๋ชจ๋ ๋์๋ ์๋ต๋ฉ๋๋ค.
์์
1. ์ฒซ ์์๋ฅผ ์์ ํ๊ฒ ํ์ธ
# FirstEquals๋ items์ expected๋ฅผ ๋ฐ์ต๋๋ค. GetArrayLength(items)>0์ ๋จผ์ ํ์ธํ๋ฏ๋ก ๋น ๋ฐฐ์ด์ items[0]์ ์ฝ์ง ์์ต๋๋ค. Main์ [42]์ ๋น ๋ฐฐ์ด์ ์ ๋ฌํด 1๊ณผ 0์ ์ป๊ณ 10์ ๋ฐํํฉ๋๋ค. ์ ์ฒด ๋ณด์กฐ ํจ์๊ฐ ์ ๊ณต๋๋ฉฐ ๋ฐฐ์ด์ ๋ฐ๊พธ์ง ์์ต๋๋ค.
Option Explicit On
FUNCTION FirstEquals(ByVal items, expected)
RETURN (GetArrayLength(items) > 0) AndAlso (items[0] = expected)
END FUNCTION
SUB Main()
DIM items[0], empty[-1]
items[0] = 42
VAR present = FirstEquals(items, 42)
VAR missing = FirstEquals(empty, 42)
RETURN present * 10 + missing
END SUB
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
FirstEquals๋ items์ expected๋ฅผ ๋ฐ์ต๋๋ค. GetArrayLength(items)>0์ ๋จผ์ ํ์ธํ๋ฏ๋ก ๋น ๋ฐฐ์ด์ items[0]์ ์ฝ์ง ์์ต๋๋ค. Main์ [42]์ ๋น ๋ฐฐ์ด์ ์ ๋ฌํด 1๊ณผ 0์ ์ป๊ณ 10์ ๋ฐํํฉ๋๋ค. ์ ์ฒด ๋ณด์กฐ ํจ์๊ฐ ์ ๊ณต๋๋ฉฐ ๋ฐฐ์ด์ ๋ฐ๊พธ์ง ์์ต๋๋ค.
2. ๋์ฒด ํธ์ถ์ ํ ๋ฒ ์คํ
# Probe๋ ByRef๋ก calls๋ฅผ ์ฆ๊ฐ์ํค๊ณ TRUE๋ฅผ ๋ฐํํฉ๋๋ค. TRUE OrElse Probe(calls)๋ ํธ์ถ์ ์๋ตํ๊ณ FALSE OrElse Probe(calls)๋ ํ ๋ฒ ํธ์ถํฉ๋๋ค. ๋ ์กฐ๊ฑด ๋ชจ๋ 1์ด๋ฉฐ Main์ ์ค์ ํธ์ถ ํ์ 1์ ๋ฐํํฉ๋๋ค.
Option Explicit On
FUNCTION Probe(ByRef calls)
calls += 1
RETURN TRUE
END FUNCTION
SUB Main()
VAR calls = 0
VAR cached = TRUE OrElse Probe(calls)
VAR fallback = FALSE OrElse Probe(calls)
RETURN calls
END SUB
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
Probe๋ ByRef๋ก calls๋ฅผ ์ฆ๊ฐ์ํค๊ณ TRUE๋ฅผ ๋ฐํํฉ๋๋ค. TRUE OrElse Probe(calls)๋ ํธ์ถ์ ์๋ตํ๊ณ FALSE OrElse Probe(calls)๋ ํ ๋ฒ ํธ์ถํฉ๋๋ค. ๋ ์กฐ๊ฑด ๋ชจ๋ 1์ด๋ฉฐ Main์ ์ค์ ํธ์ถ ํ์ 1์ ๋ฐํํฉ๋๋ค.
3. ๋๋์ ๋ณดํธ์ ์ฐ์ ์์
# AverageExceeds(total, count, limit)๋ count>0์ผ ๋๋ง ๋๋๋๋ค. (25,0,10)์ 0, (25,2,10)์ 12.5>10์ด๋ฏ๋ก 1์
๋๋ค. TRUE OrElse FALSE AndAlso FALSE๋ ์ค๋ฅธ์ชฝ AndAlso๋ฅผ ์๋ตํ๊ณ 1์
๋๋ค. Main์ "0:1:1"์ ๋ฐํํฉ๋๋ค.
Option Explicit On
FUNCTION AverageExceeds(total, count, limit)
RETURN (count > 0) AndAlso (total / count > limit)
END FUNCTION
SUB Main()
VAR empty = AverageExceeds(25, 0, 10)
VAR accepted = AverageExceeds(25, 2, 10)
VAR priority = TRUE OrElse FALSE AndAlso FALSE
RETURN CStr(empty) + ":" + CStr(accepted) + ":" + CStr(priority)
END SUB
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
AverageExceeds(total, count, limit)๋ count>0์ผ ๋๋ง ๋๋๋๋ค. (25,0,10)์ 0, (25,2,10)์ 12.5>10์ด๋ฏ๋ก 1์ ๋๋ค. TRUE OrElse FALSE AndAlso FALSE๋ ์ค๋ฅธ์ชฝ AndAlso๋ฅผ ์๋ตํ๊ณ 1์ ๋๋ค. Main์ "0:1:1"์ ๋ฐํํฉ๋๋ค.