# 코딩 스타일

## 개요

코딩 스타일이란 **코드의 일관성과 가독성을 보장하기 위한 규약**으로, 코드 작성 시 발생할 수 있는 모호성을 줄이고 협업과 유지보수를 효율화하기 위한 **권장 규칙**입니다.

루아 스크립트는 다른 언어에 비해 유연하고 간결한 문법 구조를 가지고 있어, 개발자 간 통일된 규약을 마련하지 않으면 코드의 **표현 방식이 지나치게 다양해질 가능성**이 있습니다. 따라서 일관된 코딩 스타일을 사용함으로써 변수의 범위나 용도 등 코드의 의미를 빠르게 파악하고 개발 효율을 높일 수 있습니다.

## 선언 범위에 따른 이름 규칙

스크립트 상단에서 선언하는 **파일 범위 변수**와 함수나 제어문 등 특정 범위 안에서 선언하는 **지역 변수**를 구분하기 위해 다음과 같은 규칙을 사용합니다.

### 변수

**스크립트 상단**에서 선언하는 파일 범위 변수는 **단어 첫글자를 모두 대문자**로 명명합니다.

```lua
-- Good
local Number = 1       
_G.GlobalValue = 2 


-- Bad
local number = 1 
_G.globalValue = 2
```

함수나 제어문 등 **특정 범위 안에서** 선언하는 변수는 **첫글자만 소문자**로 명명합니다.

```lua
-- Good
local function SomeFunction()
    local value = 3
    
    if value >= 3 then
        local someBoolean = false
    end
end


-- Bad
local function SomeFunction()
    local Value = 3
    
    if Value >= 3 then
        local SomeBoolean = false
    end
end
```

### 함수

함수명은 **단어 첫글자를 모두 대문자**로 명명합니다.

```lua
-- Good
local function SomeFunction()
    print("Do Someting")
end

function _G.SomeFunction()
    print("Do Someting")
end


-- Bad
local function someFunction()
    print("Do Someting")
end

function _G.someFunction()
    print("Do Someting")
end
```

## 함수의 인자와 반환값

함수의 인자와 반환값은 **첫글자만 소문자**로 명명하고, 인자 사이에 공백을 넣습니다.

```lua
-- Good
local function Sum(numValue1, numValue2)
    local result = numValue1 + numValue2
    local isSuccess = (result ~= nil)
    return isSuccess, result
end


-- Bad
local function Sum(NumValue1,NumValue2)
    local result = NumValue1 + NumValue2
    local isSuccess = (result ~= nil)
    return isSuccess,result
end
```

## 연산자

연산자 사이에 **공백**을 넣습니다.

```lua
-- Good
local Sum = 1 + 5
local IsPositiveNumber = Sum > 0

if SomeValue == 1 && SomeValue == 2 then
    print("Valid Value")
elseif SomeValue == 3 then
    print("Value Exceeded)
else
    print("Invalid Value"")  
end


-- Bad
local Sum=1+5
local IsPositiveNumber=Sum>0

if SomeValue==1&&SomeValue==2 then
    print("Valid Value")
elseif SomeValue==3 then
    print("Value Exceeded)
else
    print("Invalid Value"")  
end
```

## 들여쓰기와 줄바꿈

코드의 범위와 흐름 등 코드의 계층 구조를 명확히 하기 위해 **들여쓰기**를 준수합니다.

```lua
-- Good
if someCondition1 then
    if someCondition2 then
        print("Correct!")
    end
end


-- Bad
if someCondition1 then
if someCondition2 then
    print("Correct!")
end
end
```

테이블이나 조건문, 반복문 등 제어문을 시작할때 **줄바꿈**을 넣습니다.

<pre class="language-lua"><code class="lang-lua"><strong>-- Good
</strong>local NumberList = 
{
    1, 2, 3
}

for i = 1, 5 do
    print(i)
end


-- Bad
local NumberList = {
    1, 2, 3
}

for i = 1, 5 do	print(i)
end
</code></pre>

## 팀 프로젝트에서

협업 프로젝트에서는 팀원 간의 코딩 스타일을 통일하는 것이 중요합니다. 일관된 코딩 스타일은 코드의 가독성을 높이고, 유지보수를 용이하게 하며, 팀원들 간의 원활한 협업을 도와줍니다. 따라서, 프로젝트 초기 단계에서 코딩 규칙을 정의하고 이를 모두가 준수하도록 하는 것이 바람직합니다. 팀의 합의에 따라 변수명, 함수명, 들여쓰기 스타일 등을 정하고, 이를 기반으로 작업을 진행하세요!
