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"์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.


en ยท ru ยท uk ยท fr ยท de ยท it ยท es ยท zh-tw ยท ja ยท ko

Basic