API Basic With ko - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

With / End With

ClassicUO โ€ข Basic

With๋Š” ์ €์žฅํ•œ ํ•˜๋‚˜์˜ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ž‘์—…์„ ๋ฌถ์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„ ์•ž์˜ ์ ์€ ๊ทธ ๊ฐ์ฒด์˜ ๋ฉค๋ฒ„๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค. With UO์™€ With moduleName์€ ์ด๋ฆ„ ๊ณต๊ฐ„์„ ๋ช…์‹œ์ ์œผ๋กœ ์„ ํƒํ•˜๋Š” Basic ํ™•์žฅ ํ˜•์‹์ž…๋‹ˆ๋‹ค.

์ •ํ™•ํ•œ ๊ตฌ๋ฌธ

With objectExpression
    .Method(arguments)
    statements
End With
With UO
    .Command(arguments)
End With
With moduleName
    .field = expression
    .Procedure(arguments)
End With

๋งค๊ฐœ๋ณ€์ˆ˜

  • objectExpression / UO / moduleName โ€” ๋Œ€์ƒ์€ ํ•„์ˆ˜์ด๋ฉฐ List(), Dictionary() ๊ฐ™์€ ๋„ค์ดํ‹ฐ๋ธŒ ๊ฐ์ฒด, ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง„ ๋ณ€์ˆ˜ ๋˜๋Š” ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์‹์€ ์ง„์ž…ํ•  ๋•Œ ํ•œ ๋ฒˆ๋งŒ ํ‰๊ฐ€ํ•˜๋ฉฐ ๋ณธ๋ฌธ์ด ๋น„์–ด ์žˆ์–ด๋„ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด ์—”์ง„์—์„œ ์ˆซ์ž, ๋ฌธ์ž์—ด, ๋ฐฐ์—ด, Unit์€ ๊ฐ์ฒด ๋Œ€์ƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ฐ™์€ ์ด๋ฆ„์˜ ์ง€์—ญ ๊ฐ์ฒด ๋ณ€์ˆ˜๊ฐ€ ๋ชจ๋“ˆ๋ณด๋‹ค ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค.
  • .Method(arguments) / .field โ€” ๊ฐ์ฒด ๋ฉ”์„œ๋“œ๋Š” ๊ด„ํ˜ธ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค: .Add(value), .Item(index), .Count(). ์ธ์ˆ˜์™€ ๊ฒฐ๊ณผ๋Š” ๊ทธ๋Œ€๋กœ์ด๋ฉฐ Basic.List/Basic.Dictionary๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”. ์ž„์˜ ๊ฐ์ฒด ํ•„๋“œ๋‚˜ ์†์„ฑ์€ ์—ฌ๊ธฐ์„œ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์—์„œ๋Š” ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ .field์™€ .Procedure(arguments)๋ฅผ ์“ธ ์ˆ˜ ์žˆ์œผ๋ฉฐ Private ๊ทœ์น™๋„ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. With UO ์•ˆ์˜ .Command(...)๋Š” UO.Command(...)์ž…๋‹ˆ๋‹ค. ๋ฐ–์—์„œ๋Š” ๊ฒŒ์ž„ ๋ช…๋ น์— ๊ณ„์† UO๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • statements / End With โ€” ๋ณธ๋ฌธ์€ ๋น„์–ด ์žˆ๊ฑฐ๋‚˜ ํ˜ธ์ถœ, ๋Œ€์ž…, ์กฐ๊ฑด ๋ฐ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ค‘์ฒฉ๋œ ๋ฐ˜๋ณต๋ฌธ๊ณผ ๋ธ”๋ก์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. End With๋Š” ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค. ๋ณธ๋ฌธ ๋ฐ–์—์„œ๋Š” ์ ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฉค๋ฒ„ ์ด๋ฆ„์„ ์“ธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฐ์ฒด๋Š” ์ „์ฒด ์ด๋ฆ„์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

With๋Š” ์ž์ฒด ๋ฐ˜ํ™˜๊ฐ’์ด ์—†๋Š” ์ œ์–ด ๋ธ”๋ก์ž…๋‹ˆ๋‹ค. ID, Boolean, ์„ฑ๊ณต ์—ฌ๋ถ€๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ˜ธ์ถœํ•œ ๋ฉ”์„œ๋“œ๋Š” ๊ฐ๊ฐ์˜ ๋ฐ˜ํ™˜ ๊ทœ์น™์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ์˜ Return์€ Main์—์„œ Integer๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ 127, 28, 72๋Š” ์˜ˆ์ œ ๊ณ„์‚ฐ๊ฐ’์ž…๋‹ˆ๋‹ค.

๋™์ž‘

  • ์ค€๋น„ ๋‹จ๊ณ„์—์„œ ๋ธ”๋ก์„ ๊ฒ€์‚ฌํ•˜๊ณ  ์ƒ๋Œ€ ์ด๋ฆ„์„ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์ง„์ž…ํ•  ๋•Œ ์‹์„ ํ‰๊ฐ€ํ•˜์—ฌ ํ˜„์žฌ ํ˜ธ์ถœ์— ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์›๋ž˜ ๋ณ€์ˆ˜์— ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๋Œ€์ž…ํ•ด๋„ ์ฐธ์กฐ๋Š” ๋ฐ”๋€Œ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋จธ๋ฆฌ ๋ถ€๋ถ„์œผ๋กœ ๋‹ค์‹œ ์ง„์ž…ํ•˜๋ฉด ์žฌํ‰๊ฐ€ํ•˜๋ฉฐ ์žฌ๊ท€ ํ˜ธ์ถœ์€ ๊ฐ์ž์˜ ์ฐธ์กฐ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
  • ์•ˆ์ชฝ With์˜ ๋จธ๋ฆฌ ์‹์€ ๋ฐ”๊นฅ ๋ฌธ๋งฅ์—์„œ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์•ˆ์ชฝ ๋ณธ๋ฌธ์˜ ์ ์€ ์•ˆ์ชฝ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉฐ End With ๋’ค์—๋Š” ๋ฐ”๊นฅ ๋ฌธ๋งฅ์ด ๋ณต์›๋ฉ๋‹ˆ๋‹ค. Return, ๋ฐ˜๋ณต๋ฌธ ์ด๋™, ๋ฐ”๊นฅ์œผ๋กœ ํ–ฅํ•˜๋Š” GoTo๋Š” ๊ด€๋ จ Finally๋ฅผ ์‹คํ–‰ํ•œ ๋’ค ๋ฒ—์–ด๋‚œ ๋ฒ”์œ„๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. With ๋ณธ๋ฌธ ์•ˆ์œผ๋กœ ๋ฐ”๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์€ ๊ธˆ์ง€๋ฉ๋‹ˆ๋‹ค.
  • ์ž˜๋ชป๋œ ๋Œ€์ƒ์ด๋‚˜ ์•Œ ์ˆ˜ ์—†๋Š” ๋ฉ”์„œ๋“œ๋Š” false๊ฐ€ ์•„๋‹ˆ๋ผ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. Catch/On Error๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์ƒ ํ‰๊ฐ€๊ฐ€ ์‹คํŒจํ•˜๋ฉด On Error Resume Next๊ฐ€ ๋ธ”๋ก ์ „์ฒด๋ฅผ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. With๋Š” ์ž์ฒด ๋ฐ˜๋ณต, ๋Œ€๊ธฐ, ์Šค๋ ˆ๋“œ ์ƒ์„ฑ์„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ผ์‹œ ์ค‘์ง€์™€ ์ •์ง€ ๊ฒ€์‚ฌ๋Š” ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ๋œ ์ด๋ฆ„์€ ์ค€๋น„๋œ ์Šคํฌ๋ฆฝํŠธ์™€ ํ•จ๊ป˜ ์บ์‹œ๋˜๋ฉฐ ๋ฉ”์„œ๋“œ๋งˆ๋‹ค ๋Œ€์ƒ ์‹์„ ๋‹ค์‹œ ํ‰๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ

1. ํ•œ ๋ฒˆ๋งŒ ํ‰๊ฐ€

# Choose๋Š” values๋ฅผ ByVal, calls๋ฅผ ByRef๋กœ ๋ฐ›์•„ calls๋ฅผ 1๋กœ ๋Š˜๋ฆฌ๊ณ  ์›๋ž˜ ๋ชฉ๋ก์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ค‘๊ฐ„์— values์— ์ƒˆ ๋ชฉ๋ก์„ ๋Œ€์ž…ํ•ด๋„ ๋‘ .Add๋Š” ์ €์žฅํ•œ ๋ชฉ๋ก์— 2์™€ 7์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. Item์€ 0๊ณผ 1 ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Main์€ 1*100+2*10+7=127์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
Option Explicit On
Function Choose(ByVal values, ByRef calls) As Object
    calls += 1
    Return values
End Function

Sub Main()
    Dim calls=0
    Dim values=List()
    Dim original=values
    With Choose(values, calls)
        .Add(2)
        values=List()
        .Add(7)
    End With
    Return calls*100+original.Item(0)*10+original.Item(1)
End Sub

๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ ์‹คํ–‰ ์„ค๋ช…:

Choose๋Š” values๋ฅผ ByVal, calls๋ฅผ ByRef๋กœ ๋ฐ›์•„ calls๋ฅผ 1๋กœ ๋Š˜๋ฆฌ๊ณ  ์›๋ž˜ ๋ชฉ๋ก์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ค‘๊ฐ„์— values์— ์ƒˆ ๋ชฉ๋ก์„ ๋Œ€์ž…ํ•ด๋„ ๋‘ .Add๋Š” ์ €์žฅํ•œ ๋ชฉ๋ก์— 2์™€ 7์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. Item์€ 0๊ณผ 1 ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Main์€ 1100+210+7=127์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

2. ์ค‘์ฒฉ ๊ฐ์ฒด์™€ ๋งˆ๋ฌด๋ฆฌ

# groups๋Š” ๋ฌธ์ž์—ด ํ‚ค "child"์— ๋ชฉ๋ก child๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. .Item("child")๊ฐ€ ๋ฐ”๊นฅ ์‚ฌ์ „์—์„œ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์•ˆ์ชฝ .Add(2)์™€ Finally์˜ .Add(7)์ด ๋ชฉ๋ก์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. End With ๋’ค์˜ .Set("result",8)์€ ๋‹ค์‹œ ์‚ฌ์ „์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. Count()๋Š” 2, Item("result")๋Š” 8์„ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ Main์€ 28์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
Option Explicit On
Sub Main()
    Dim groups=Dictionary()
    Dim child=List()
    groups.Set("child", child)
    With groups
        With .Item("child")
            Try
                .Add(2)
            Finally
                .Add(7)
            End Try
        End With
        .Set("result", 8)
    End With
    Return child.Count()*10+groups.Item("result")
End Sub

๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ ์‹คํ–‰ ์„ค๋ช…:

groups๋Š” ๋ฌธ์ž์—ด ํ‚ค "child"์— ๋ชฉ๋ก child๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. .Item("child")๊ฐ€ ๋ฐ”๊นฅ ์‚ฌ์ „์—์„œ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์•ˆ์ชฝ .Add(2)์™€ Finally์˜ .Add(7)์ด ๋ชฉ๋ก์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. End With ๋’ค์˜ .Set("result",8)์€ ๋‹ค์‹œ ์‚ฌ์ „์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. Count()๋Š” 2, Item("result")๋Š” 8์„ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ Main์€ 28์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

3. ๋ชจ๋“ˆ๊ณผ UO

# With Tools๋Š” .total, .AddAmount, .CountItems๊ฐ€ ์†ํ•œ ๋ชจ๋“ˆ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. total์€ 4๋กœ ์‹œ์ž‘ํ•˜๊ณ  AddAmount๊ฐ€ amount=3์„ ByVal๋กœ ๋ฐ›์•„ 7์ด ๋ฉ๋‹ˆ๋‹ค. CountItems๋Š” ๋‘ ์š”์†Œ ๋ฐฐ์—ด์„ ๋ฐ›์•„ With UO๋ฅผ ํ†ตํ•ด UO.GetArrayLength(values)๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ 2๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค. Main์€ 7*10+2=72๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆ ์ ‘๊ทผ ๊ทœ์น™์€ ๊ทธ๋Œ€๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
Option Explicit On
Module Tools
    Public Var total=0
    Public Sub AddAmount(ByVal amount)
        total += amount
    End Sub
    Public Function CountItems(ByVal values) As Integer
        With UO
            Return .GetArrayLength(values)
        End With
    End Function
End Module

Sub Main()
    Dim values[1]
    With Tools
        .total=4
        .AddAmount(3)
        Return .total*10+.CountItems(values)
    End With
End Sub

๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ ์‹คํ–‰ ์„ค๋ช…:

With Tools๋Š” .total, .AddAmount, .CountItems๊ฐ€ ์†ํ•œ ๋ชจ๋“ˆ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. total์€ 4๋กœ ์‹œ์ž‘ํ•˜๊ณ  AddAmount๊ฐ€ amount=3์„ ByVal๋กœ ๋ฐ›์•„ 7์ด ๋ฉ๋‹ˆ๋‹ค. CountItems๋Š” ๋‘ ์š”์†Œ ๋ฐฐ์—ด์„ ๋ฐ›์•„ With UO๋ฅผ ํ†ตํ•ด UO.GetArrayLength(values)๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ 2๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค. Main์€ 7*10+2=72๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆ ์ ‘๊ทผ ๊ทœ์น™์€ ๊ทธ๋Œ€๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.


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

Basic