NodeCrypto 도움말

타입 및 연산자

데이터 타입

타입설명
int임의 정밀도 수학적 정수 (고정 폭 오버플로 없음, 최대 1,048,576비트).
bool불리언 진릿값 (True 또는 False).
bytes바이트 시퀀스 (최대 16 MiB).
string유니코드 텍스트 문자열. 에러 메시지, 16진수·UTF-8 변환, f-string에 사용되며 +, ==, != 연산을 지원한다.
list[T]T가 int, bool, bytes, string 중 하나인 동질 리스트. 중첩 리스트(list[list[...]])는 허용하지 않는다. 최대 1,048,576개 원소.
tuple[...]다중 반환값을 갖는 함수의 반환 타입과 언패킹 대입에만 사용되며, 변수나 리스트에 저장할 수 없다.

Script 노드의 입력·출력 포트에는 bytes, int, bool, string을 사용할 수 있다. 리스트와 튜플은 스크립트 내부 전용 타입이다.

타입 검사 규칙

확정 대입 검사 (Definite Assignment Analysis)

모든 지역 변수는 읽기 전에 반드시 대입되어야 하며, 모든 출력 포트 변수는 스크립트가 끝날 때 실패하지 않는 모든 실행 경로에서 확정 대입되어야 한다:

if n > 100:
    o = "big"
else:
    o = "small"

위 코드에서 else 분기를 생략하면 컴파일 시점에 SCRIPT_OUTPUT_UNASSIGNED 진단 에러가 발생한다.

값 의미론 (Value Semantics)

bytes와 list[T]를 포함한 모든 값은 값 의미론(Value Semantics)을 따른다. 변수 대입과 함수 인자 전달은 독립적인 복사본처럼 동작하므로, 한 변수의 바이트나 리스트 원소를 수정해도 다른 변수의 값은 절대 변하지 않는다:

a = h"00 00"
b = a
b[0] = 255

연산자

연산자 우선순위는 Python과 동일하다. 비트 연산자는 비교 연산자보다 우선순위가 높으므로 x & 0x80 != 0은 (x & 0x80) != 0으로 해석된다. 연쇄 비교(a < b < c)는 허용하지 않는다.

연산자피연산자결과의미
+int, intint덧셈
+bytes, bytesbytes바이트열 이어 붙이기
+string, stringstring문자열 이어 붙이기
+list[T], list[T]list[T]리스트 이어 붙이기
-, *int, intint뺄셈, 곱셈
*bytes, int (또는 int, bytes)bytes바이트열 반복 (음수 횟수는 BYTES_INVALID_ARGUMENT 에러)
//, %int, intint내림 나눗셈(Floor Division) 및 나머지 (나머지의 부호는 제수의 부호를 따르며, 0으로 나누면 SCRIPT_DIVISION_BY_ZERO 에러)
단항 -intint부호 반전
&, |, ^, ~intint2의 보수 기준 비트 연산
<<, >>int, intint산술 비트 시프트 (음수 시프트 횟수는 SCRIPT_INVALID_ARGUMENT 에러)
&, |, ^bytes, bytesbytes바이트별 AND, OR, XOR (길이가 다르면 BYTES_LENGTH_MISMATCH 에러)
~bytesbytes전체 바이트 비트 반전(NOT)
<<, >>bytes, intbytes바이트 길이를 유지하는 전체 버퍼 비트 시프트 (바이트 경계를 넘어 캐리 이동, 빈 비트는 0으로 채움)
==, !=동일 타입bool동등 / 부등 비교
<, <=, >, >=int, intbool수치 대소 비교
<, <=, >, >=bytes, bytesbool사전순(Lexicographical) 바이트열 비교
and, or, notboolbool불리언 논리 연산

연산자 예시

식결과
2 + 3 * 414
7 // 23
-7 // 2-4 (내림 나눗셈)
-7 % 21
7 % -2-1 (제수의 부호)
0xF0 & 0x3C48 (0x30)
0xF0 | 0x0F255
0xFF ^ 0x0F240 (0xF0)
~5-6
1 << 8256
-16 >> 2-4 (산술 시프트)
h"0f f0" & h"3c 3c"0c30
h"0f" | h"f0"ff
h"ff" ^ h"0f"f0
~h"0f"f0
h"81 00" << 10200 (길이 유지, 밀려난 상위 비트는 버림)
h"81 00" >> 14080
h"01" + h"02"0102
h"00" * 3000000
2 * h"ff"ffff
"ab" + "cd"abcd
h"01 02" < h"01 03"True (사전순)
h"01" < h"01 00"True (짧은 접두사가 더 작음)
h"01" == h"02"False
x == 0 and not (x > 1)True