IO 모듈은 입출력을 다루는 함수를 제공해요.
문자열을 표준 출력에 쓰려면 IO.puts를 사용해요. IO.puts는 항상 문자열 끝에 줄바꿈을 추가해요. 그런 동작을 원하지 않으면 대신 IO.write를 사용해요. 두 함수 모두 성공하면 :ok 아톰을 반환해요.
IO.puts("Hi!")
# > Hi!
# => :ok
IO.puts는 문자열을 쓰는 데 유용하지만, 그 외에는 그다지 유용하지 않아요. 표준 출력에 어떤 값이든 쓸 수 있게 해주는 디버깅 도구가 필요하면, 대신 IO.inspect를 사용해요. IO.inspect는 전달받은 값을 그대로 반환하므로 코드의 어느 지점에든 넣을 수 있어요. 또한 :label 같은 여러 옵션을 받아서 다른 IO.inspect 호출과 구분할 수 있게 해줘요.
표준 입력에서 한 줄을 읽으려면 IO.gets를 사용해요. IO.gets는 인자 하나를 받아요. 그 인자는 입력을 요청하는 프롬프트로 출력되는 문자열이에요. IO.gets는 프롬프트 뒤에 줄바꿈을 추가하지 않으니, 필요하면 직접 넣어요.
IO.gets("What's your name?\n")
# > What's your name?
# < Mary
# => "Mary\n"
여러분과 친구들은 종이와 펜으로 하는 역할 수행 게임을 좋아해요. 그런데 새로운 사람이 모임에 합류하기가 어렵다는 걸 알게 됐어요. 새로 오는 사람들은 캐릭터를 만드는 단계에서 자주 어려움을 겪고, 어디서부터 시작해야 할지 모르거든요. 그래서 새로운 플레이어들을 돕기 위해, 그 과정을 안내해 줄 작은 프로그램을 만들기로 했어요.
RPG.CharacterSheet.welcome/0 함수를 구현해요. 환영 메시지를 출력하고 :ok를 반환해야 해요.
RPG.CharacterSheet.welcome()
# > Welcome! Let's fill out your character sheet together.
# => :ok
RPG.CharacterSheet.ask_name/0 함수를 구현해요. 질문을 출력하고, 답을 기다린 뒤, 앞뒤 공백을 제거한 답을 반환해야 해요.
RPG.CharacterSheet.ask_name()
# > What is your character's name?
# < Mathilde
# => "Mathilde"
RPG.CharacterSheet.ask_class/0 함수를 구현해요. 질문을 출력하고, 답을 기다린 뒤, 앞뒤 공백을 제거한 답을 반환해야 해요.
RPG.CharacterSheet.ask_class()
# > What is your character's class?
# < healer
# => "healer"
RPG.CharacterSheet.ask_level/0 함수를 구현해요. 질문을 출력하고, 답을 기다린 뒤, 답을 정수로 반환해야 해요.
RPG.CharacterSheet.ask_level()
# > What is your character's level?
# < 2
# => 2
RPG.CharacterSheet.run/0 함수를 구현해요. 새로운 플레이어를 맞이하고, 캐릭터의 이름과 클래스, 레벨을 물은 뒤, 캐릭터 시트를 맵으로 반환해야 해요. 또 "Your character"라는 레이블과 함께 맵을 출력해야 해요.
RPG.CharacterSheet.run()
# > Welcome! Let's fill out your character sheet together.
# > What is your character's name?
# < Mathilde
# > What is your character's class?
# < healer
# > What is your character's level?
# < 2
# > Your character: %{class: "healer", level: 2, name: "Mathilde"}
# => %{class: "healer", level: 2, name: "Mathilde"}
Exercism에 가입하고 Elixir 트랙을 개념 58개연습 문제 168개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.