Dada 언어를 처음 소개하며, main 함수 생략, 문자열 보간과 여러 줄 문자열, 그리고 익숙한 단일 String 타입을 통해 ‘편리함이 기본값’인 설계를 설명한다.
이전의 Fun with Dada 글에 이어, 이번 글부터는 Dada를 가르치기 시작해보려 한다. 각 글은 짧게 유지할 생각이다. 기본적으로 아침 커피를 마시는 동안 쓸 수 있는 분량 정도로.1
아주 첫 번째 Dada 프로그램은 다음과 같다.
println("Hello, Dada!")
무엇을 하는지는 여러분 모두 짐작할 수 있을 거라 생각한다. 그래도 이 단순한 프로그램에서도 짚고 넘어갈 만한 것이 있다:
“당신에게는 코드를 쓸 권리가 있다. main 함수를 명시적으로 작성하지 않으면, 대신 하나가 제공된다.” 초기에 사용자가 main 함수를 생략할 수 있게 변경했는데, 그 변화가 언어의 가벼운 느낌에 얼마나 큰 차이를 만드는지 보고 놀랐다. 바꾸기 쉬운 것, 얻는 것도 큰 것.
다음은 또 다른 Dada 프로그램이다.
let name = "Dada"
println("Hello, {name}!")
놀랍지 않게도, 이 프로그램은 앞의 것과 같은 일을 한다.
“편리함이 기본값이다.” 문자열은 기본적으로 보간(interpolation), 즉 {name} 같은 표현을 지원한다. 사실 지원하는 것은 그것만이 아니다. 여러 줄에 걸친 문자열도 매우 편리하게 쓸 수 있다. 다음 프로그램도 우리가 지금까지 본 것들과 같은 일을 한다:
let name = "Dada"
println("
Hello, {name}!
")
" 바로 뒤에 곧바로 개행이 오면, 앞뒤의 개행은 제거된다. 그리고 다음 줄들에서 “공백 접두사(whitespace prefix)”도 함께 제거된다. 내부 개행은 유지되므로, 예를 들어 아래와 같은 코드는:
let name = "Dada"
println("
Hello, {name}!
How are you doing?
")
다음을 출력한다.
Hello, Dada!
How are you doing?
String물론 name 변수의 타입을 명시적으로 적을 수도 있다:
let name: String = "Dada"
println("Hello, {name}!")
그러면 그 타입이 String임을 알게 될 것이다. 이것 자체는 특별할 것이 없지만, Rust에 익숙하다면 이야기가 다르다. Rust에서는 타입이 &'static str가 될 테니 말이다. 이는 Rust 초심자에게 늘 걸림돌이 되는 부분인데, 그보다도 나는 이게 꽤 큰 짜증거리 라고 느낀다. 상수 문자열과 생성된 문자열을 섞어 쓰는 곳마다 "Foo".to_string()이나 format!("Foo")를 계속 적어야 한다는 점이 정말 싫다.
대부분의 현대 언어와 마찬가지로, Dada의 문자열은 불변(immutable)이다. 그래서 만들어서 여기저기 복사해 둘 수 있다:
let name: String = "Dada"
let greeting: String = "Hello, {name}"
let name2: String = name
좋아, 사실 우리는 여기서 정말 겉만 살짝 긁어본 수준이다! 이는 Dada의 “친근한 겉껍질”일 뿐이고, 생김새와 느낌은 수많은 다른 언어들과 비슷하다. 다음에는 권한 시스템과 변경 가능성(mutation)에 대해 다루기 시작할 텐데, 그때부터는 조금 더 흥미로워질 것이다.