100개 언어 Speedrun: 4회: Lua

11377 단어 lua
Lua는 브라질에서 온 소형 프로그래밍 언어로 전 세계에서 중대한 영향을 미치는 유일한 기술일 것이다.
Lua와 다른 언어의 주요 차이점은 기존 응용 프로그램에 끼워 넣기에 매우 적합하고 비디오 게임에서 특히 유행하는 것이다(here's just a partial list.
원칙적으로, 당신은 모든 기존 언어 (예를 들어 Tcl, Python, JavaScript 또는 다른 좋아하는 언어) 에 거의 모든 가상 머신을 삽입할 수 있습니다.이것은 종종 Lua에 끼워 넣는 것보다 훨씬 복잡하다.현재 자바스크립트는 루아를 주요 분야로 내놓고 있지만, 게임 개발이나 수정 분야에 들어가고 싶다면, 기본적인 루아는 여전히 유용한 기술이다.우리가 루아를 탐색할 때, 루아가 인기를 잃고 있는 몇 가지 이유를 발견할 수 있을 것이다.

안녕, 세상!
다음 코드는 놀라지 않을 수 있습니다.
print("Hello, World!")
다음은 피보나치--의 주석과 범위 순환 문법을 제외하고는 이상하게 보이지 않는다.
-- Fibonacci function
function fib(n)
  if n < 3 then
    return 1
  else
    return fib(n - 1) + fib(n - 2)
  end
end

for i = 1,30 do
  print(fib(i))
end
그리고 쉬쉬하는 소리:
function fizzbuzz(n)
  if n % 15 == 0 then
    return "FizzBuzz"
  elseif n % 5 == 0 then
    return "Buzz"
  elseif n % 3 == 0 then
    return "Fizz"
  else
    return n
  end
end

for i = 1,100 do
  print(fizzbuzz(i))
end

탁자.
Lua는 'table' 이라는 단일 데이터 구조를 가지고 있으며, 이것은 하나의 그룹/목록이자 사전/해시/대상이다.
실제로 어떻게 작동하는지 살펴보겠습니다.
local x = {"foo", "bar"}
local y = {"foo", "bar"}

print(x)
print(y)
print(x == y)
우리는 천진난만하게 기대한다.
{"foo", "bar"}
{"foo", "bar"}
true
그러나 우리가 얻은 것은 다음과 같다.
table: 0x7fb9cee04080
table: 0x7fb9cee040e0
false
이게 정답이야!Lua는 복잡한 유형을 처리할 때 평등성이 없고 (자바스크립트도 같은 결함이 있으며) 내장 코드도 없다. console.log
우리끼리 쓰자.
좋아, 우리 자신의 검사를 쓰는 것은 그리 어렵지 않아.이것은 놀랍지 않다. 어떤 멋진 인쇄도 하지 않을 것이다. 데이터가 자신에게 연결되면 무한 순환에 들어갈 수 있지만, 지금은 우리의 목적을 충족시킬 수 있을 것이다.
function inspect(value)
  if type(value) == "table" then
    local result = ""
    for k, v in pairs(value) do
      if result ~= "" then
        result = result .. ", "
      end
      result = result .. tostring(k) .. "=" .. inspect(v)
    end
    return "{" .. result .. "}"
  else
    return tostring(value)
  end
end

local x = {"foo", "bar"}
local y = {name="Bob", surname="Ross", age=52}

print(inspect(x))
print(inspect(y))
이것은 우리로 하여금
{1=foo, 2=bar}
{age=52, name=Bob, surname=Ross}
저희가 뭘 배웠죠?
  • type(value) 우리가 전달한 모든 유형을 되돌려줍니다. 대부분의 복잡한 유형
  • 에 대해서"table"
  • 문자열은 ..와 연결할 수 있고 문자열 삽입값이 없음
  • != 맞춤법 ~=
  • 표의 키 순서는 보류하지 않습니다
  • 수 그룹 번호는 1부터!
  • 마지막은 좀 놀랄 수도 있어.과거에는 프로그래밍 언어가 0 기반 인덱스와 1 기반 인덱스로 나뉘었다.Lua는 대략 이 시대의 마지막 잔재로 0을 기반으로 한 색인이 승리했다.
    그나저나 Perl Hilarioly는 42로 설정할 수 있는 배열 색인을 결정하는 특수 변수$[를 가지고 있다.그들은 어느 때 이 기능을 삭제했다.이것은 사실 완전히 미친 것이 아니다. 이것은 awk 스크립트를 Perl에 이식하는 것을 돕기 위해 설계된 것이다.어쩌면 나는 언젠가 이 이야기를 할지도 모른다.

    Unicode
    이제 Lua가 유니코드를 어떻게 처리하는지 살펴보겠습니다.
    a = "Hello"
    b = "Żółw"
    c = "💩"
    
    print(a:lower())
    print(b:upper())
    print(#a)
    print(#b)
    print(#c)
    
    사실은 상황이 매우 나쁘다는 것을 증명한다.
    hello
    ŻółW
    5
    7
    4
    
    불행하게도 :lower():upper()는 유니코드에 대해 아무것도 모르고 # 문자열 길이가 아니라 string.len(a)#a와 유사하고 바이트 수로 되돌아왔다.

    루아를 써야 되나?
    솔직히 새로운 프로그램에 대해서는 사실이 아니지만, 게임 개발에 관심이 있다면 기본 지식을 이해하는 것이 가치가 있다.그것은 게임 스크립트에서 여전히 중요한 위치를 차지한다.보시다시피 언어의 약점 때문에 아주 간단한 일을 해도 우리는 문제에 부딪힐 수 있습니다.
    루아는 지역사회 분열에도 중대한 문제가 있는 것 같다.고성능의 LuaJIT 구현은 상당히 오래된 Lua5.1 버전만 지원하고 메인 언어는 5.3으로 업그레이드되었다.Lua 코드는 종종 일부 엔진(일반적으로 게임 엔진)에 삽입되기 때문에 많은 코드는 엔진이 제공하는 각종 기능에 의존하여 다른 곳에서 운행하지 않는다.루아락은 3000개의 패키지를 가지고 있는데 130k 루비젬스나 130만 개의 npm 패키지에 비해 보잘것없다. 모든 암석이 루아마다 운행되더라도 그들은 없다.
    현재 루아는 곧 사라질 언어로 보이지만 상황은 여전히 호전될 가능성이 있다.대부분의 다른 소프트웨어와 달리 비디오 게임은 출시 수십 년 만에 사용되기 시작했고 루아 코드도 첨부됐다.

    비밀 번호
    All code examples for the series will be in this repository .
    Code for the Lua episode is available here .

    좋은 웹페이지 즐겨찾기