{ }codelper

배우기 › Craykon

언어마다 다른 것 · 43

크레이콘만의 규칙

나라 말로 쓰는 키워드, 계산을 멈추는 빈값, 엄격한 ==, 이어 내려가지 않는 선택.

이 단원은 Craykon에서 배워요.
이 단원은 크레이콘 자체 이야기예요.
다른 7개 언어는 키워드가 영어(if·for·return)로만 정해져 있어요.

크레이콘은 키워드를 나라 말로 쓰고, 빈값·==·선택이 다른 언어보다 엄격해요.
아래 예제는 결석(-)을 빈값으로 넣은 점수 목록에서 빈값은 건너뛰고, 나머지에 선택으로 등급을 매긴 뒤 평균을 내요.

n = 콘솔.줄읽기().수로변환();점수들 = [];반복 (i = 0; i < n; i++){    줄 = 콘솔.줄읽기();    만약 (줄 == "-")    {        점수들.넣기(빈값);    }    아니면    {        점수들.넣기(줄.수로변환());    }}합 = 0;낸사람 = 0;각각 (점수 에서 점수들){    만약 (점수 == 빈값)    {        콘솔.쓰기("? " + 점수);        건너뛰기;    }    합 += 점수;    낸사람 += 1;    선택 (수학.내림(점수 / 10))    {        경우 10:        경우 9:            콘솔.쓰기(점수 + " A");            그만;        경우 8:            콘솔.쓰기(점수 + " B");            그만;        그밖에:            콘솔.쓰기(점수 + " C");            그만;    }}콘솔.쓰기(합 / 낸사람);콘솔.쓰기("85" == 85);
stdin
5
92
-
78
85
-
stdout
92 A
? 빈값
78 C
85 B
? 빈값
85
false

핵심

  • 키워드를 나라 말로 써요.
    한 스크립트 안에서 섞어 써도 같은 프로그램이라 만약 (n > 3) { Console.WriteLine(n); }도 돌아가요.
  • 저장되고 실행되는 프로그램은 하나라서, 화면 언어를 바꾸면 같은 코드가 그 나라 말로 다시 찍혀요.
    편집기에서는 같은 코드를 타일로 짤 수도 있고, 타일과 글을 오가며 고쳐도 돼요.
  • 빈값은 '값이 없음'이에요(다른 언어의 null·None).
    빈값으로 계산하거나 크기를 비교하면 그 자리에서 멈춰요.
    문자열과 이으면 멈추지 않고 빈값이라고 보여요(예제의 ? 빈값).
  • ==는 엄격해요.
    타입이 다르면 늘 거짓이라 0 == 거짓도 거짓이에요(화면에는 false).
    JavaScript의 ===와 같다고 생각하면 돼요.
  • 선택은 맞는 경우 하나만 실행하고 아래로 이어 내려가지 않아서 그만을 안 써도 돼요.
    여러 값은 경우 10, 9:처럼 쉼표로 묶어요.
  • 수는 하나뿐이에요(JavaScript와 같은 64비트 실수).
    7 / 2는 3.5라서 십의 자리는 수학.내림(점수 / 10), 정수 나눗셈은 수학.몫(7, 2)(→ 3)을 써요.
    2^53을 넘는 정수는 정확하지 않아요.

언어별로 쓰는 법

Craykon한국어 키워드 만약·아니면·반복·각각·동안·돌려주기·선택은 영어로 if·else·for·foreach·while·return·switch, 일본어로 もし·繰り返す…, 중국어로 如果·循环…이에요.
이름도 콘솔.쓰기·Console.WriteLine·コンソール.書く·控制台.输出이 모두 같은 것이에요

자주 하는 실수

빈값으로 계산했어요

점수 = 빈값;
콘솔.쓰기(점수 + 1);

→ "빈값으로는 계산할 수 없어요(+)" 오류로 멈춰요. JavaScript는 null + 1이 1, undefined + 1이 NaN으로 조용히 틀린 수를 내지만, 크레이콘은 그런 수를 만들지 않아요

계산 전에 만약 (점수 == 빈값)으로 먼저 물어봐요.

키워드를 변수 이름으로 썼어요

경우 = 3;

→ "'case'·'default'는 선택(switch) 안에서만 써요" 오류. 모든 나라 말의 키워드가 예약어라서 나·경우·에서·if·場合도 이름으로 못 써요

키워드가 아닌 다른 이름을 골라요.

읽은 문자열을 그대로 수와 비교했어요

콘솔.쓰기("85" == 85);

→ false — 콘솔.줄읽기()로 읽은 값은 늘 문자열이고, 타입이 다르면 ==는 거짓이에요

수와 비교하려면 .수로변환()부터 해요.

언어마다 다른 점
빈값은 계산에 들어가는 순간 멈춰요.
목록이나 입력에 빈값이 섞일 수 있으면, 더하거나 비교하기 전에 == 빈값으로 먼저 걸러 내세요.

연습 문제