출력하거나 비교할 텍스트에는 문자열을 쓰세요. 경로·정규식·셸·SQL 데이터의 태그와 삽입 값 구조를 보존하려면 태그 템플릿을 쓰세요.
문자열의 문자 수 확인하기
첫 프로그램에 따라 토파즈를 설치한 뒤, 다음 코드를 strings-templates.tpz로 저장하세요.
let 제목 = "Topaz 💎"
let 스칼라수 = 제목.scalars().length
let 설정경로 = p"config/topaz.toml"
let 질의 = sql"SELECT name FROM projects WHERE title = {제목}"
print("{제목}: {스칼라수}")파일을 저장한 폴더에서 검사하고 실행하세요.
topaz check strings-templates.tpz
topaz run strings-templates.tpz검사가 통과하면 프로그램이 다음 내용을 출력합니다.
Topaz 💎: 7제목에는 영문자 다섯 개, 공백, 이모지에 해당하는 유니코드 스칼라 값이 일곱 개 있습니다. 스칼라는 텍스트에 쓰는 유니코드 코드 포인트 하나입니다. scalars()는 스칼라 하나씩을 문자열로 담은 Array<string>을 반환합니다.
글자 뒤에 결합 악센트가 붙으면 여러 스칼라가 화면에서 한 글자로 보일 수 있습니다. 이렇게 보이는 한 글자 단위를 문자소 클러스터라고 합니다. scalars()로 센 수는 눈에 보이는 글자 수나 저장 바이트 수와 다를 수 있습니다.
토파즈는 스칼라 순서를 그대로 비교합니다. 모양이 같은 텍스트도 스칼라 배열이 다르면 서로 다른 문자열로 비교될 수 있습니다.
문자열과 템플릿 고르기
| 하려는 일 | 형식 | 결과 |
|---|---|---|
| 텍스트 출력·비교 | "Hello, {name}" | 표준 값 표시 규칙에 따라 값을 넣은 문자열 |
| 여러 줄 작성 | """...""" | 아래 공백 규칙을 따르는 여러 줄 텍스트 |
| 경로 표현 | p"config/app.toml" | 플랫폼별 경로 정규화에 쓰는 템플릿 |
| 정규식 표현 | r"^[a-z]+$" | 이스케이프를 줄여 쓰는 정규식 템플릿 |
| 셸 명령 표현 | sh"tool {argument}" | 명령 텍스트와 인수를 구분해 담는 템플릿 |
| SQL 질의 표현 | sql"WHERE id = {id}" | 삽입 값을 질의 매개변수로 구분해 담는 템플릿 |
예제의 질의는 SQL 텍스트와 제목 매개변수를 따로 보관합니다. 템플릿을 만드는 것만으로 질의나 셸 명령을 실행하지는 않습니다. 정규식 템플릿은 모든 플랫폼에서 동일하게 동작하는 완전한 정규식 문법을 정하지 않습니다.
네 태그 모두 내장 타입 template의 값을 만듭니다. 타입을 명시하려면 let 질의: template = sql"..."처럼 쓰세요. print에는 문자열을 전달하세요. 템플릿을 문자열에 보간하면 <sql template, 1 part(s), 0 interpolation(s)> 같은 요약문이 나옵니다. 실행할 질의문으로 변환하지는 않습니다.
템플릿의 태그와 텍스트 조각은 확인할 수 있습니다. 질의.tag는 "sql"을 반환합니다. 질의.parts는 "SELECT name FROM projects WHERE title = "와 ""를 담은 Array<string>을 반환합니다. 이 두 속성으로 삽입 값 자체를 꺼낼 수는 없습니다.
보간과 여러 줄 문자열 쓰기
문자열 안에 {expression}으로 표현식의 값을 넣는 것을 보간이라고 합니다. 일반 문자열과 여러 줄 문자열은 다음 이스케이프 표기를 함께 씁니다.
| 표기 | 의미 |
|---|---|
\n, \t, \r | 줄바꿈, 탭, 캐리지 리턴 |
\\, \" | 역슬래시, 큰따옴표 |
\{, \} | 중괄호 문자 |
큰따옴표 세 개로 감싸면 줄바꿈을 넣을 수 있습니다. 닫는 따옴표가 별도 줄에 있으면, 그 앞의 공백·탭 배열이 들여쓰기 기준입니다. 빈 줄이 아닌 각 줄은 정확히 같은 배열로 시작해야 합니다. 맞지 않는 줄이 있으면 검사기가 오류를 냅니다. 탭은 문자 그대로 비교합니다.
언어 규칙은 첫 개행과 닫는 따옴표 기준의 들여쓰기를 제거하도록 정합니다. 현재 공개판 5.20.3 인터프리터는 이를 보존합니다. 이 인터프리터에서 정확한 텍스트가 필요하면 "one\ntwo\n"처럼 일반 문자열에 이스케이프를 명시하세요.
p, r, sh, sql 태그는 여러 줄 문자열에도 쓸 수 있습니다. 태그를 여는 따옴표에 붙이세요. p "file"처럼 띄어 쓰면 구문 오류가 납니다.
거부된 표기 고치기
| 시도한 표기 | 대신 쓸 표기 |
|---|---|
text[0], text.length | 비어 있지 않은 문자열의 첫 스칼라는 text.scalars()[0], 개수는 text.scalars().length |
| 문자열 슬라이스 | 스칼라 단위가 목적에 맞으면 text.scalars()에 Array 연산 적용 |
백틱·작은따옴표·${expression} | 큰따옴표와 {expression} |
html"...", 사용자 정의 태그 | 일반 문자열이나 용도에 맞는 네 가지 지원 태그 |
문자소 클러스터 API와 문자열 직접 슬라이스 구문은 지원하지 않습니다. 내장 타입 이름 template으로 record template, enum template, newtype template을 선언해도 오류가 납니다.
줄바꿈은 어휘 구조와 레이아웃, 값 표시는 런타임 동작에서 이어서 보세요. 다른 문법의 대체 표기는 금지·유예 형식에서 찾을 수 있습니다.