-
러스트와 다른 언어의 멀티라인 처리 비교Programmer/Programming 2019. 2. 12. 14:38
새줄문자가 들어간 스트링 리터럴 출력
Rust
fn main() { println!("In the rooom the women come and go, Singing of Mount Abora"); }
결과 : 스트링 리터럴의 새줄문자와 공백문자를 그대로 출력
In the rooom the women come and go, Singing of Mount Abora
C
#include <stdio.h> int main() { printf("In the rooom the women come and go, Singing of Mount Abora"); putchar('\n'); }
결과 : 빌드 실패
cc -Wall -O2 -o prt_nl_str prt_nl_str.c prt_nl_str.c:5:12: warning: missing terminating '"' character [-Winvalid-pp-token] printf("In the rooom the women come and go, ^ prt_nl_str.c:5:12: error: expected expression prt_nl_str.c:6:31: warning: missing terminating '"' character [-Winvalid-pp-token] Singing of Mount Abora"); ^ prt_nl_str.c:12:11: error: expected '}' /* End: */ ^ prt_nl_str.c:4:1: note: to match this '{' { ^ 2 warnings and 2 errors generated.
Python 1
파이썬에서 멀티라인은 연속된 작은따옴표 3개(''') 또는 큰따옴표 3개(""")를 사용한다.print("""In the rooom the women come and go, Singing of Mount Abora""")
결과 : Rust와 같은 결과
In the rooom the women come and go, Singing of Mount Abora
Common Lisp
(princ "In the rooom the women come and go, Singing of Mount Abora")
결과 : 스트링 리터럴의 새줄문자와 공백문자를 그대로 출력. 2
러스트와 동일In the rooom the women come and go, Singing of Mount Abora
긴 문자열을 여러줄로 나누어서 표현하기
Rust
역슬래쉬(\)로 쉽게 표현 가능.fn main() { println!("It was a bright, cold day in April, and \ there were four of us-\ more or less."); }
결과 : 역슬래쉬 다음의 모든 화이트스페이스(whitespace)는 제거된다.
들여쓰기를 할 수 있어서 읽기 좋은 코드를 작성할 수 있다.It was a bright, cold day in April, and there were four of us-more or less.
C
각각을 작은 문자열로 나누어 적는다. 역슬래쉬는 공백 없이 적어야 해서 들여쓰기가 깨진다.#include <stdio.h> int main() { // (1) printf("It was a bright, cold day in April, and " "there were four of us-" "more or less."); putchar('\n'); // (2) printf("It was a bright, cold day in April, and \ there were four of us-\ more or less."); putchar('\n'); // (3) printf("It was a bright, cold day in April, and \ there were four of us-\ more or less."); putchar('\n'); }
결과 :
It was a bright, cold day in April, and there were four of us-more or less. It was a bright, cold day in April, and there were four of us- more or less. It was a bright, cold day in April, and there were four of us-more or less.
(2)의 결과를 보면, 역슬래쉬 다음 줄의 공백이 그대로 포함된다.
즉, 들여쓰기 만큼 공백을 출력되어 원하는 결과가 나오지 않았다.
Rust처럼 출력되는 (3)을 보면 들여쓰기는 엉망이다.
가독성이 떨어진다.
C에서는 (1)과 같은 방식으로 작성하는 것이 가장 좋다.Python
각각을 작은 문자열로 나누어 연결한다. 역슬래쉬는 공백 없이 적어야 해서 들여쓰기가 깨진다.# (1) print("It was a bright, cold day in April, and " + \ "there were four of us-" + \ "more or less.") # (2) print("""It was a bright, cold day in April, and \ there were four of us-\ more or less.""") # (3) print("""It was a bright, cold day in April, and \ there were four of us-\ more or less.""")
결과 :
It was a bright, cold day in April, and there were four of us-more or less. It was a bright, cold day in April, and there were four of us- more or less. It was a bright, cold day in April, and there were four of us-more or less.
C와 비슷하다.
가독성과 목적을 달성한 것은 문자열을 '+' 연산자로 연결하여 출력하는 (1)의 방법이다..Common Lisp
각각을 작은 문자열로 나누어 연결한다.(princ (concatenate 'string "It was a bright, cold day in April, and " "there were four of us-" "more or less.")) (fresh-line) (princ "It was a bright, cold day in April, and \ there were four of us-\ more or less.")
결과 : 역슬래쉬로는 긴 문자열을 표현할 수 없다.
It was a bright, cold day in April, and there were four of us-more or less. It was a bright, cold day in April, and there were four of us- more or less.
결론
언어
여러줄 문자열
한 줄 문자열을 여러줄의 문자열로 표현하기
Rust
모양 그대로 출력
역슬래쉬로 편하게 구현 가능. 들여쓰기까지 가능
C
빌드 실패
개별 문자열을 나열해야 함. 역슬래쉬를 사용하면 들여쓰기 불가능.
Python
모양 그대로 출력
개별 문자열을 이어붙어야 함. 역슬래쉬를 사용하면 들여쓰기 불가능.
Common Lisp
모양 그대로 출력
개별 문자열을 이어붙어야 함. 역슬래쉬를 사용할 수 없음.
러스트가 여러줄(multi-line) 문자열을 다루는데 매우 편리함을 볼 수 있다.
이 밖에서 탈출문자(escape sequence)를 사용할 필요가 없는 저수준 문자열(raw string)과
유니코드가 아닌 8 바이트 슬라이스(slice)로 다루는 바이트 문자열도 제공한다.'Programmer > Programming' 카테고리의 다른 글
함수적 프로그래밍 작성하기 (0) 2019.12.03 러스트(Rust)를 위한 SyntaxHighlighter 3.0 플러그인 개선 (0) 2019.02.14 러스트에서 문자열을 효과적으로 연결하기 (1) 2019.02.08 파이썬 프러퍼티 사용하여 일관되게 속성에 접근하라 (0) 2018.01.17 기본 값(default value)을 언제 사용할까? (0) 2018.01.02 댓글