Elixir 프로그래밍 언어 시작하기
게시 됨: 2022-03-11블로그 게시물, 해커 뉴스 스레드, 좋아하는 개발자 트윗을 읽거나 팟캐스트를 듣고 있다면 이 시점에서 Elixir 프로그래밍 언어에 대해 들어봤을 것입니다. 이 언어는 오픈 소스 세계에서 잘 알려진 개발자인 Jose Valim이 만들었습니다. Ruby on Rails MVC 프레임워크나 그와 Plataformatec의 동료들이 지난 몇 년 동안 작업한 devise 및 simple_form ruby gems에서 그를 알 수 있습니다.
Jose Valim에 따르면 Elixir는 2011년에 태어났습니다. 그는 루비 세계의 동시성 문제를 해결할 좋은 도구가 없기 때문에 새로운 언어를 구축할 생각을 가지고 있었습니다. 그 당시 동시성과 분산 집중 언어를 공부하다가 마음에 드는 두 가지 언어인 Erlang과 Clojure를 찾았습니다. 이 두 언어는 JVM에서 실행됩니다. 그는 Erlang 언어(Erlang VM)에서 본 모든 것을 좋아했고 Clojure가 잘하는 다형성, 메타프로그래밍 및 언어 확장성 속성과 같이 보이지 않는 것을 싫어했습니다. 그래서 Elixir는 Clojure에 대한 대안과 Erlang Virtual Machine에서 실행되는 동적 언어와 우수한 확장성 지원을 염두에 두고 탄생했습니다.
Elixir는 불변 상태의 동적 기능적 언어와 단순하고 현대적이며 깔끔한 구문으로 확장 가능하고 유지 관리 가능한 애플리케이션을 구축하도록 설계된 동시성에 대한 액터 기반 접근 방식을 설명합니다. 이 언어는 짧은 대기 시간 및 내결함성 특성으로 알려진 전투 증거, 고성능 및 분산 가상 머신인 Erlang 가상 머신에서 실행됩니다.
일부 코드를 보기 전에 Elixir가 성장하고 있는 커뮤니티에 의해 승인되었음을 말할 가치가 있습니다. 지금 Elixir를 배우고 싶다면 책, 도서관, 컨퍼런스, 모임, 팟캐스트, 블로그 게시물, 뉴스레터 및 Erlang 제작자가 인정한 모든 종류의 학습 소스를 쉽게 찾을 수 있습니다.
몇 가지 코드를 보자!
Elixir 설치:
Elixir를 설치하는 것은 모든 주요 플랫폼에서 매우 쉽고 대부분의 플랫폼에서 한 줄로 되어 있습니다.
아치 리눅스
Elixir는 공식 저장소를 통해 Arch Linux에서 사용할 수 있습니다.
pacman -S elixir
우분투
Ubuntu에 Elixir를 설치하는 것은 약간 번거롭습니다. 그러나 그럼에도 불구하고 충분히 쉽습니다.
wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb && sudo dpkg -i erlang-solutions_1.0_all.deb apt-get update apt-get install esl-erlang apt-get install elixir
OS X
Homebrew를 사용하여 OS X에 Elixir를 설치합니다.
brew install elixir
IEx를 만나보세요
설치가 완료되면 쉘을 열 차례입니다. Elixir에서 개발하고 싶다면 쉘에서 많은 시간을 보내게 될 것입니다.
Elixir의 대화형 쉘 또는 IEx는 Elixir를 탐색할 수 있는 REPL - (Read Evaluate Print Loop)입니다. 거기에 표현식을 입력하면 즉각적인 피드백을 제공하는 평가를 받게 됩니다. 코드는 실제로 평가되고 컴파일되지 않으므로 셸에서 프로파일링이나 벤치마크를 실행하지 않도록 하십시오.
중단 명령
IEx REPL을 시작하기 전에 알아야 할 중요한 사항이 있습니다. 바로 종료하는 방법입니다.
터미널에서 실행 중인 프로그램을 닫기 위해 CTRL+C
를 누르는 데 익숙할 것입니다. IEx REPL에서 CTRL+C
를 누르면 중단 메뉴가 열립니다. 중단 메뉴에서 CTRL+C
를 다시 눌러 쉘을 종료 a
.
중단 메뉴 기능에 대해 자세히 설명하지 않겠습니다. 그러나 몇 가지 IEx 도우미를 봅시다!
도우미
IEx는 h()
유형을 모두 나열하기 위해 많은 도우미를 제공합니다.
그리고 이것은 당신이보아야 할 것입니다 :
그것들은 내가 가장 좋아하는 것 중 일부이며, 나는 그것들도 당신의 것이 될 것이라고 생각합니다.
-
h
방금 보았듯이 이 함수는 도우미 메시지를 인쇄합니다. -
h/1
은 동일한 함수이지만 이제 하나의 인수가 필요합니다.
예를 들어, String
strip/2
메서드에 대한 문서를 보고 싶을 때마다 다음을 쉽게 수행할 수 있습니다.
아마도 Elixir에서 프로그래밍하는 동안 사용하게 될 두 번째로 유용한 IEx 도우미는 c/2
일 것입니다. 이 도우미는 주어진 Elixir 파일(또는 목록)을 컴파일하고 두 번째 매개변수로 컴파일된 파일을 쓸 경로를 예상합니다.
Anagram 연습인 http://exercism.io/ Elixir exersices 중 하나에서 작업하고 있다고 가정해 보겠습니다.
따라서 anagram.exs 파일에 match/2
메서드가 있는 Anagram
모듈을 구현했습니다. 당신은 훌륭한 개발자로서 모든 것이 예상대로 작동하는지 확인하기 위해 몇 가지 사양을 작성했습니다.
현재 디렉토리는 다음과 같습니다.
이제 Anagram 모듈에 대해 테스트를 실행하려면 테스트를 실행/컴파일해야 합니다.
방금 보았듯이 파일을 컴파일하려면 컴파일하려는 파일의 인수 경로로 전달하는 elixir
실행 파일을 호출하기만 하면 됩니다.
이제 세션 컨텍스트에서 액세스할 수 있는 Anagram 모듈을 사용하여 IEx REPL을 실행하려고 한다고 가정해 보겠습니다. 일반적으로 사용되는 두 가지 옵션이 있습니다. 첫 번째는 iex -r anagram.exs
와 같은 옵션 -r
을 사용하여 파일을 요구할 수 있다는 것입니다. 두 번째는 IEx 세션에서 바로 컴파일할 수 있습니다.
간단하게, 그대로!
좋습니다. 모듈을 다시 컴파일하려면 어떻게 합니까? IEx를 종료하고 다시 실행하고 파일을 다시 컴파일해야 합니까? 아니요! 기억력이 좋다면 IEx REPL에서 사용 가능한 모든 도우미를 나열할 때 재컴파일 명령에 대한 내용을 본 것을 기억할 것입니다. 어떻게 작동하는지 봅시다.
이번에는 파일 경로가 아닌 모듈 자체를 인수로 전달했습니다.
우리가 보았듯이 IEx에는 Elixir 프로그램이 어떻게 작동하는지 더 잘 배우고 이해하는 데 도움이 되는 다른 유용한 도우미가 많이 있습니다.

엘릭서 유형의 기본
숫자
숫자에는 두 가지 유형이 있습니다. 임의 크기의 정수 및 부동 소수점 숫자.
정수
정수는 10진수, 16진수, 8진수 및 2진수로 작성할 수 있습니다.
Ruby에서와 같이 큰 숫자를 쓸 때 밑줄을 사용하여 세 자리 숫자 그룹을 구분할 수 있습니다. 예를 들어 다음과 같이 수억을 바로잡을 수 있습니다.
100_000_000
8진수:
0o444
16진수:
0xabc
바이너리:
0b1011
수레
플로어는 IEEE 754 배정밀도입니다. 정확도는 16자리이며 최대 지수는 약 10308입니다.
부동 소수점은 소수점을 사용하여 작성됩니다. 포인트 앞뒤에 하나 이상의 숫자가 있어야 합니다. 후행 지수를 추가할 수도 있습니다. 예를 들어 1.0, 0.3141589e1 및 314159.0-e입니다.
원자
원자는 이름을 나타내는 상수입니다. 그것들은 변경할 수 없는 값입니다. 선행 콜론 :
과 일련의 문자, 숫자, 밑줄 및 @
기호를 사용하여 원자를 작성합니다. 또한 선행 콜론 :
및 따옴표로 묶인 임의의 문자 시퀀스를 사용하여 작성할 수 있습니다.
Atom은 매우 강력한 도구이며 erlang 기능과 키 및 Elixir 메서드를 참조하는 데 사용됩니다.
다음은 몇 가지 유효한 원자입니다.
:name, :first_name, :"last name", :===, :is_it_@_question?
부울
물론 부울은 true 및 false 값입니다. 하지만 좋은 점은 결국 원자일 뿐입니다.
문자열
기본적으로 Elixir의 문자열은 UTF-8을 준수합니다. 그것들을 사용하기 위해 "
또는 '
로 묶인 임의의 수의 문자를 가질 수 있습니다. 또한 이스케이프된 문자뿐만 아니라 문자열 내부에 보간된 표현식을 가질 수도 있습니다.
작은 따옴표로 묶인 문자열은 실제로 바이너리 목록입니다.
익명 기능
Elixir는 함수형 언어로서 익명 함수를 기본 유형으로 가지고 있습니다. 함수를 작성하는 간단한 방법은 fn (argument_list) -> body end
입니다. 그러나 함수는 여러 인수 목록, 보호 절 등이 있는 여러 본문을 가질 수 있습니다.
Programming Elixir 책에서 Dave Thomas는 fn…end를 문자열 리터럴을 둘러싸는 따옴표로 생각할 것을 제안합니다. 여기서 문자열 값을 반환하는 대신 함수를 반환합니다.
튜플
Tuple은 변경할 수 없는 인덱스 배열입니다. 크기를 반환하는 것은 빠르며 불변의 특성으로 인해 새 값을 추가하는 것은 느립니다. 튜플을 업데이트할 때 실제로는 튜플 자체의 완전히 새로운 복사본을 만드는 것입니다.
튜플은 배열의 반환 값으로 매우 자주 사용됩니다. Elixir로 코딩하는 동안 {:ok, something_else_here}
를 매우 자주 보게 될 것입니다.
튜플을 작성하는 방법은 다음과 같습니다. {?a,?b,?c}
.
패턴 매칭
패턴 일치에 대해 알아야 할 모든 것을 설명할 수는 없지만 곧 읽으려는 내용은 시작하기 위해 알아야 할 많은 내용을 다룹니다.
Elixir는 =
를 일치 연산자로 사용합니다. 이것을 이해하기 위해 우리 =
우리가 알고 있는 것을 다른 전통 언어로 배울 필요가 있습니다. 전통적인 언어에서 등호 연산자는 할당을 위한 것입니다. Elixir에서 equals 연산자는 패턴 매칭을 위한 것입니다.
그래서, 그것이 왼쪽에서 값이 작동하는 방식입니다. 변수인 경우 오른쪽에 바인딩되고, 변수가 아닌 경우 Elixir는 변수를 오른쪽과 일치시키려고 시도합니다.
핀 연산자
Elixir는 항상 왼쪽에 있는 변수인 핀 연산자에 대해 패턴 일치를 강제 실행하는 방법을 제공합니다.
기울기
Elixir에서 목록은 우리가 다른 언어에서 알고 있는 배열처럼 보이지만 그렇지 않습니다. 목록은 머리와 꼬리로 구성된 연결된 구조입니다.
키워드 목록
키워드 목록은 튜플 쌍의 목록입니다.
당신은 단순히 목록으로 작성합니다. 예: [{:one, 1}, 2, {:three, 3}]. 목록을 정의하는 지름길은 다음과 같습니다. [하나: 1, 셋: 3].
키워드 목록에서 항목을 검색하려면 다음 중 하나를 사용할 수 있습니다.
Keyword.get([{:one, 1}, 2, {:three, 3}], :one)
또는 바로 가기를 사용합니다.
[{:one, 1}, 2, {:three, 3}][:one]
키워드 목록은 값을 검색할 때 느리기 때문에 비용이 많이 드는 작업이므로 빠른 액세스가 필요한 데이터를 저장하는 경우에는 Map을 사용해야 합니다.
지도
맵은 키/값 쌍의 효율적인 모음입니다. 키는 키로 원하는 모든 값을 가질 수 있지만 일반적으로 동일한 유형이어야 합니다. 키워드 목록과 달리 지도는 주어진 키에 대해 하나의 항목만 허용합니다. 그것들은 성장함에 따라 효율적이며 연관 배열이 필요할 때 일반 사용 맵에서 Elixir 패턴 일치에 사용할 수 있습니다.
지도를 작성하는 방법은 다음과 같습니다.
%{ :one => 1, :two => 2, 3 => 3, "four" => 4, [] => %{}, {} => [k: :v]}
결론
Elixir는 굉장하고 이해하기 쉬우며 간단하지만 강력한 유형과 학습을 시작할 때 도움이 되는 매우 유용한 도구를 제공합니다. 이 첫 번째 파트에서 우리는 Elixir 프로그램이 구축된 다양한 데이터 유형과 이를 구동하는 연산자를 다루었습니다. 나중 파트에서 우리는 Elixir의 세계 - 함수형 및 동시성 프로그래밍에 대해 더 깊이 파고들 것입니다.