format 함수

format 함수

사양(specification) 문자열에 따라 여러 값을 형식화해서 문자열을 만드는 함수예요. C의 printf 함수나 다른 프로그래밍 언어의 유사 함수와 비슷해요.

출처: 문서

본문

format은 사양 문자열에 따라 여러 값을 형식화해서 문자열을 만들어요. C의 printf 함수나 다른 프로그래밍 언어의 유사 함수와 비슷해요.

format(spec, values...)

예제

> format("Hello, %s!", "Ander")
Hello, Ander!
> format("There are %d lights", 4)
There are 4 lights

%s나 %d 같은 단순한 format 동사는 종종 더 읽기 쉬운 템플릿 보간 문법과 비슷하게 동작해요.

> format("Hello, %s!", var.name)
Hello, Valentina!
> "Hello, ${var.name}!"
Hello, Valentina!

따라서 format 함수는 다음 절에서 설명하는 것처럼 더 복잡한 format 사양을 사용할 때 더 유용해요.

사양 문법 (Specification Syntax)

사양은 % 문자로 시작하는 format 동사를 포함하는 문자열이에요. 함수 호출에는 사양의 각 동사 시퀀스마다 인자가 하나씩 더 있어야 해요. 동사들은 연속된 인자와 차례대로 매칭되며, 각 인자가 해당 format 동사가 요구하는 타입으로 변환 가능한 한 지시대로 형식화돼요.

사양에는 다음 동사들이 포함될 수 있어요.

동사 결과
%% 값 하나를 소비하지 않는 리터럴 퍼센트 기호.
%v 아래에서 설명하는 값 타입에 따른 기본 형식화.
%#v jsonencode처럼 값의 JSON 직렬화.
%t 불리언으로 변환해서 true 또는 false 생성.
%b 정수로 변환해서 이진 표현 생성.
%d 정수로 변환해서 십진 표현 생성.
%o 정수로 변환해서 팔진 표현 생성.
%x 정수로 변환해서 소문자 16진 표현 생성.
%X %x와 같지만 대문자를 사용.
%e 숫자로 변환해서 -1.234456e+78 같은 과학적 표기 생성.
%E %e와 같지만 지수를 도입하는 데 대문자 E를 사용.
%f 숫자로 변환해서 123.456처럼 지수가 없는 소수 분수 표기 생성.
%g 큰 지수일 때는 %e처럼, 그 외에는 %f처럼 동작.
%G 큰 지수일 때는 %E처럼, 그 외에는 %f처럼 동작.
%s 문자열로 변환해서 문자열의 문자들을 삽입.
%q 문자열로 변환해서 JSON 따옴표 문자열 표현 생성.

%v를 사용하면 값 타입에 따라 다음 format 동사 중 하나가 선택돼요.

타입 동사
string %s
number %g
bool %t
기타 %#v

null 값은 %v나 %#v로 형식화하면 문자열 null을 생성하고, 다른 동사에서는 오류를 일으켜요.

동사 문자 바로 앞에 선택적인 십진수를 넣으면 값 표현에 사용될 문자 수를 지정하는 폭(width) 수정자를 포함할 수 있어요. 선택적인 폭 뒤에 마침표(.)와 십진수를 붙이면 정밀도(precision)를 지정할 수 있어요. 폭이나 정밀도를 생략하면 주어진 값에 따라 기본 값이 선택돼요. 예를 들어:

시퀀스 결과
%f 기본 폭과 정밀도.
%9f 폭 9, 기본 정밀도.
%.2f 기본 폭, 정밀도 2.
%9.2f 폭 9, 정밀도 2.

% 기호 바로 뒤에는 추가 플래그를 설정하는 다음 기호들을 사용할 수 있어요.

기호 결과
공백 숫자가 양수일 때 부호 위치에 공백 하나를 남김.
+ 양수여도 숫자의 부호를 표시.
- 오른쪽이 아니라 왼쪽에 공백으로 폭을 채움.
0 공백 대신 앞에 0으로 폭을 채움.

기본적으로 % 시퀀스는 첫 번째부터 시작해 연속적인 인자를 소비해요. 동사 문자 바로 앞에 [n] 시퀀스를 넣으면(n은 십진 정수) 1부터 시작하는 인덱스로 특정 값 인자를 명시적으로 선택해요. 명시적 인덱스 없이 뒤따르는 호출은 n+1, n+2 등으로 이어져요.

format 문자열이 불가능한 변환을 요청하거나 주어진 인자보다 더 많은 인자에 접근하면 오류가 생겨요. 지원되지 않는 format 동사에도 오류가 생성돼요.

더 알아보기 (Learn more)

  • formatdate 함수는 사람이 읽을 수 있는 타임스탬프를 위한 특화된 형식화 함수예요.
  • formatlist 함수는 같은 사양 문법으로 문자열 리스트를 만들어요.