문자열·수학·JSON·파일 API
Standard API로 문자열·숫자·컬렉션·JSON·파일을 처리합니다. 새 소스는 아래 현행 API를 사용하고 CLI 절차로 검사합니다. 등록 당시 참조 소스는 변경하지 않고 함께 제공하므로 SDK가 달라진 API는 그대로 복사하지 마세요. 이 페이지의 코드는 웹 runner에 등록된 실행 카드가 아닙니다. 네이티브 실행과 다른 언어로의 생성은 아래 대상별 제한을 따릅니다.
표준 API는 정상 입력에서의 기능을 공통으로 정의하며, 경계값·잘못된 입력·출력 형식은 대상 언어의 라이브러리를 따릅니다. 아래 비교 출력과 오류 예제는 기존 native 실행에서 확인한 기준입니다. 다른 언어로 생성할 때 bool 표기, JSON 키 순서와 숫자 표기 등이 달라질 수 있습니다.
람다로 컬렉션 변환하기
섹션 제목: “람다로 컬렉션 변환하기”filter는 조건을 만족하는 항목만 고르고 map은 각 항목을 바꿉니다. reduce는 초기값 0에 항목을 차례로 더합니다. 함수 값은 (int) -> int twice = x => x * 2;처럼 선언하고 twice(3)으로 호출합니다. 아래 보존 원본의 Function<int, int>와 apply는 현행 화살표 함수 타입으로 바꾸어 작성합니다.
class Lambdas { static void main() { Function<int, int> twice = x => x * 2; List<int> values = [1, 2, 3, 4]; List<int> selected = values.filter(x => x > 2); List<int> doubled = selected.map(x => x * 2); int total = doubled.reduce(0, (sum, value) => sum + value); print(twice.apply(3)); print(doubled.join(",")); print(total); }}66,814지역 변수의 값을 캡처하면 그 변수는 변경할 수 없습니다. 다음 보존 원본은 캡처 변수 재대입을 설명합니다. 현행 SDK에서는 Function<int, int>를 (int) -> int, plus.apply(3)을 plus(3)으로 작성한 뒤에도 offset = 2는 캡처 규칙에 어긋납니다. 이 재대입을 제거해야 합니다.
class CapturedMutation { static void main() { int offset = 1; Function<int, int> plus = value => value + offset; offset = 2; print(plus.apply(3)); }}허용 위치와 인터페이스 종류는 람다와 캡처, 전체 메서드는 컬렉션에서 확인합니다.
문자열·Math·날짜·Regex
섹션 제목: “문자열·Math·날짜·Regex”문자열을 숫자로 바꿀 때는 toInt/toLong/toDouble, 논리 값으로 바꿀 때는 toBool을 사용합니다. 공통 정상 입력은 -42, 2.5 같은 십진수와 true, false입니다. 공백·지수 표기·잘못된 텍스트의 허용 여부와 실패 방식은 대상별로 다릅니다. 예를 들어 TypeScript의 toInt는 Number.parseInt를 사용하므로 "12a"를 12로 읽습니다. isInt/isLong/isDouble의 허용 범위도 대상별로 확인하세요. native는 잘못된 변환 입력을 오류로 처리합니다. 실패 대신 null이 필요하면 toIntOrNull/toLongOrNull/toDoubleOrNull을 사용합니다. 십진수 텍스트는 같은 값을, 숫자가 전혀 아닌 텍스트는 null을 반환하며 결과는 null 확인 뒤 사용합니다.
숫자 값 자체를 좁은 타입으로 바꿀 때는 long.toInt(), double.toInt(), double.toLong()을 사용합니다. 결과 타입의 범위 안에서는 double의 소수 부분을 0 방향으로 버립니다. 범위 밖 값·NaN·무한대는 대상별로 다르며 native는 오류로 처리합니다. 넓은 타입으로 명시해 바꿀 때는 int.toLong(), int.toDouble(), long.toDouble()을 사용합니다. 같은 타입으로의 long.toLong(), double.toDouble()은 거절됩니다. (int)value 같은 cast 구문은 없습니다.
문자열을 이어 붙일 횟수가 많으면 TextBuilder의 append·appendLine(끝에 \n 추가)·toString을 사용합니다. text.codePoints()·codePointCount()는 모든 대상에서 Unicode code point 단위로 셉니다. CodePoint.toText(text.codePoints())는 원래 문자열이며, CodePoint.isDigit/isLetter/isWhitespace/isUpperCase/isLowerCase는 ASCII 문자에서 같은 결과를 냅니다.
현행 날짜 계산 메서드는 addDays/addHours/addMinutes/addSeconds/addMillis입니다. 아래 보존 원본의 plusDays(1)은 새 소스에서 addDays(1)로 작성합니다.
class TextMathDate { static void main() { string number = " 42 "; print(number.trim().toInt() + 8); print(Math.sqrt(81.0).toString()); DateTime start = DateTime.of(2026, 10, 17, 12, 0, 0); print(start.plusDays(1).day()); Regex code = Regex("[A-Z]+-[0-9]+"); print(code.matches("DOC-42")); print(code.replaceAll("DOC-42", "checked")); }}50918truechecked| 영역 | 주요 API | 주의할 계약 |
|---|---|---|
| 문자열 | length, trim, split, toUpperCase, toLowerCase, 숫자 변환 |
ASCII와 범위 안 인덱스가 공통 기준. 비ASCII 길이·인덱스·대소문자와 공백 집합은 대상별로 다름 |
| Math | PI/E, abs/min/max/clamp, sqrt/pow, floor/ceil/round/trunc, floorDiv/floorMod, sign, isNaN/isFinite, log/exp, 삼각 함수 |
유한한 정상 입력을 공통으로 처리. .5 반올림, 정의역 오류·NaN·무한대와 마지막 자리 정밀도는 대상별로 다름 |
| DateTime | now/of/fromEpochMillis/parse, 날짜 필드, addDays/Hours/Minutes/Seconds/Millis, plus/minus(Duration), until, format/toString, UTC용 nowUtc/ofUtc/toUtc/toLocal/toUtcIsoString/parseUtcIsoString, 이름 있는 시간대용 ofZone/offsetMinutesIn/formatIn |
대상 날짜 라이브러리를 사용. 날짜 범위·시간대·일광절약시간·parse 허용 형태·출력 형식은 대상별로 다름 |
| Regex | matches/containsMatch/find/findAll/findGroups, replaceFirst/replaceAll/split, escape |
리터럴·문자 클래스·그룹·반복·앵커와 i/m 등 엔진이 공통으로 해석하는 패턴을 사용 |
floorDiv는 음의 무한대 방향으로 내리고 floorMod는 나누는 수의 부호를 따르므로 floorDiv(a, b) * b + floorMod(a, b)는 a입니다. 0으로 나누면 ArgumentException입니다. 시간 간격은 Duration.ofDays/ofHours/ofMinutes/ofSeconds/ofMillis로 만들고, 경과 시간은 Stopwatch.start()의 elapsed()로 읽습니다. 반복 가능한 난수가 필요하면 Random(seed)의 nextInt(bound)·nextDouble()·nextBool()·shuffle(list)을 사용합니다. 같은 seed의 수열은 같은 대상 안에서만 같고, 보안 용도에는 SecureRandom을 사용합니다.
native의 Math.round는 half-up으로 반올림한 double을 반환하지만 Python은 .5를 짝수 쪽으로 반올림합니다. DateTime의 일광절약시간 누락·중복 구간도 모든 대상에서 같지 않습니다. 다른 컴퓨터의 날짜를 비교할 때는 시간대와 유효 범위를 먼저 확인하세요. toIsoString()은 ISO 텍스트를 만드는 API입니다. 시간대와 toString()의 세부 표기는 생성 대상의 날짜 라이브러리를 따릅니다.
native 문자열 길이·인덱스는 Unicode code point를, Java·TypeScript는 UTF-16 코드 단위를, Go는 UTF-8 바이트를 셉니다. 한글과 보조 평면 문자의 길이가 대상별로 달라질 수 있습니다. native의 대소문자 변환은 ASCII 기준이며 다른 대상은 각 언어의 변환을 사용합니다.
Regex의 세부 문법과 치환 문자열은 대상 엔진을 따릅니다. Python은 re, TypeScript는 RegExp, Java는 java.util.regex, Go는 RE2를 사용하므로 역참조·lookaround·이름 있는 그룹 등은 공통 지원으로 가정하지 마세요. native는 공통 부분집합 밖의 패턴을 제한합니다. Regex 클래스 지원은 regex { } DSL 지원을 의미하지 않습니다. 패턴 검사는 검사·실행 단계에서 실패할 수 있으며 일부 엔진은 backtracking으로 실행 시간이 급증할 수 있습니다.
이름 있는 시간대
섹션 제목: “이름 있는 시간대”DateTime.ofZone(zone, year, month, day, hour, minute, second)는 IANA 시간대(Asia/Seoul, America/New_York, UTC 등)의 벽시계 시각을 UTC 보기의 시각으로 만듭니다. 일광절약시간으로 건너뛴 시각은 그 간격만큼 뒤로 옮기고, 반복되는 시각은 앞의 순간을 사용합니다. offsetMinutesIn(zone)은 그 시점의 UTC 오프셋(분), formatIn(zone, pattern)은 그 시간대의 벽시계를 format과 같은 패턴 문자로 씁니다.
DateTime meeting = DateTime.ofZone("Asia/Seoul", 2026, 11, 2, 9, 0, 0);print(meeting.formatIn("America/New_York", "yyyy-MM-dd HH:mm"));대상이 모르는 시간대 이름은 ArgumentException입니다. 각 대상은 자체 시간대 데이터베이스를 사용하므로 최근에 바뀐 규칙은 대상별로 다를 수 있습니다. Dart 생성은 시간대 데이터베이스가 없어 이 메서드들을 DART_TIME_ZONE_UNSUPPORTED로 거절합니다.
지역 형식
섹션 제목: “지역 형식”Format은 숫자·백분율·통화·날짜·시각을 지역 표기로 씁니다. 지원 지역은 ko-KR, en-US, en-GB, ja-JP, zh-CN, de-DE, fr-FR이며 언어만 쓰면(ko, en, ja, zh, de, fr) 그 언어의 첫 지역을 사용합니다. 대·소문자와 -·_ 구분은 상관없습니다. 표기는 각 대상의 지역 데이터가 아닌 Unibase의 한 표에서 만들므로 브라우저를 포함한 모든 대상이 같은 문자를 씁니다.
| API | ko-KR |
en-US |
de-DE |
|---|---|---|---|
Format.number(1234567L, locale) |
1,234,567 |
1,234,567 |
1.234.567 |
Format.number(-1234.567, 2, locale) |
-1,234.57 |
-1,234.57 |
-1.234,57 |
Format.percent(0.256, 1, locale) |
25.6% |
25.6% |
25,6 % |
Format.currency(1234567L, "USD", locale) |
$12,345.67 |
$12,345.67 |
12.345,67 $ |
Format.date(time, "long", locale) |
2026년 10월 30일 |
October 30, 2026 |
30. Oktober 2026 |
Format.time(time, locale) |
오후 3:05 |
3:05 PM |
15:05 |
currency는 금액을 최소 단위(원, 센트)의long으로 받습니다. 통화는 소수 자리가 없는KRW·JPY와 두 자리인USD·EUR·CNY·GBP입니다.- 소수 자릿수는 0~20이며, 반올림해 0이 되는 음수에는 빼기 기호를 붙이지 않습니다.
date의 스타일은short,long,full입니다. - 목록에 없는 지역·통화·날짜 스타일과 범위 밖 소수 자릿수는
ArgumentException입니다.number에 NaN이나 무한대를 넘겨도ArgumentException입니다. date·time은DateTime의 보기(지역 또는 UTC) 필드를 읽습니다. 다른 시간대는ofZone또는formatIn을 사용합니다.- 이진수로 정확히 중간에 놓인
double의 반올림과 1e15 이상의 값은 대상별로 다를 수 있습니다.
JSON 조회와 수정
섹션 제목: “JSON 조회와 수정”Json.parse로 문자열을 읽고 Json.object(), Json.array(), Json.of(value)로 값을 만듭니다. JSON null 상수는 Json.NULL입니다. get은 객체 키, at은 배열 위치를 읽습니다. 값을 꺼낼 때 실제 종류에 맞는 변환 메서드를 선택하세요.
다음은 현행 API의 작성 예입니다. 실제 서버 변환 출력이 아닌 소스 형태를 설명합니다.
class JsonExample { static void main() { JsonValue record = Json.object(); record.set("name", Json.of("Kim")); record.set("count", Json.of(3)); if (record.has("name")) { print(record.get("name").asString()); } print(record.toJson()); }}다음 참조 원본은 등록 당시 API를 사용합니다. 새 소스에서는 ofLong/ofString을 of, text()를 toJson()으로 작성합니다. 비교 출력도 당시 native 결과입니다.
class JsonValues { static void main() { JsonValue record = Json.parse("{\"name\":\"Kim\",\"count\":2}"); record.set("count", Json.ofLong(3)); JsonValue tags = Json.array(); tags.add(Json.ofString("docs")); record.set("tags", tags); print(record.get("name").asString()); print(record.get("count").asLong()); print(record.get("tags").at(0).asString()); print(record.has("missing")); print(record.text()); }}Kim3docsfalse{"name":"Kim","count":3,"tags":["docs"]}| 작업 | API |
|---|---|
| 종류 확인 | isNull/isObject/isArray/isString/isNumber/isBool |
| 조회 준비 | has(key), keys(), size() |
| 값 접근 | get(key), at(index) |
| 변환 | asString(), asLong(), asDouble(), asBool() |
| 변경 | set(key, value), add(value), remove(key) |
| 출력 | toJson()은 한 줄, toPrettyJson()은 들여쓰기 |
set/add는 객체·배열의 값을 바꿉니다. 없는 키와 범위 밖 인덱스의 결과·오류는 대상별로 다르므로 has/size를 먼저 확인하세요. native는 순환 참조를 거절하고 키를 삽입 순서로 보관하지만 이를 다른 대상의 공통 계약으로 사용하지 마세요. TypeScript는 정수처럼 보이는 키의 순서가 달라질 수 있습니다. 현행 Go의 객체 표현은 삽입 순서를 보존하지만 JSON의 숫자 표기와 세부 결과까지 다른 대상과 같다는 뜻은 아닙니다.
class JsonMissing { static void main() { JsonValue value = Json.object(); print(value.get("missing").text()); }}이 소스는 native에서 없는 키를 읽어 실행 오류를 발생시킵니다. has("missing")로 먼저 분기하거나, 네이티브 실행에서 Exception을 catch해 오류를 처리할 수 있습니다. native에서 처리하지 않은 예외는 종료 코드 1로 끝납니다. 다른 대상의 같은 조회가 반드시 오류가 되는 것은 아닙니다.
JSON은 유효한 입력의 생성·조회·수정 기능을 공통으로 제공합니다. 중복 키, 숫자 범위·표기, 키 순서와 오류 메시지는 대상 JSON 라이브러리를 따릅니다. TypeScript의 number와 Go의 JSON float64는 큰 정수를 그대로 보존하지 못할 수 있으므로 JSON 왕복의 정밀도를 별도로 확인하세요. native 파서는 중복 키, 끝 쉼표, 뒤따르는 텍스트, 잘못된 UTF-8·이스케이프와 깊이 512 초과를 거절합니다.
변환 대상에는 Json.parse 형태를 사용할 수 있으며, json { ... } 블록은 지원하는 프로필에서 해당 텍스트의 JSON 파싱으로 생성합니다. 서버의 JsonValue HTTP 본문·응답과 Mapper TEXT 경계는 서버 프로젝트의 타입·크기·파싱 조건을 확인하세요. 일반 함수 안의 JSON 사용과 전달 경계는 구분합니다.
로컬 파일과 경로
섹션 제목: “로컬 파일과 경로”다음 예제는 새 빈 작업 폴더에서만 실행하세요. 현재 작업 폴더의 manual-example.txt를 쓰고 마지막에 삭제합니다. 같은 이름의 사용자 파일이 있는 폴더에서 실행하면 덮어쓸 수 있습니다.
import unibase.io.File;import unibase.io.FilePath;
class Files { static void main() { string path = FilePath.join(".", "manual-example.txt"); File.writeText(path, "first\n"); File.appendText(path, "second\n"); print(File.readLines(path).size()); print(FilePath.extension(path)); print(File.readText(path)); print(File.delete(path)); }}2txtfirstsecond
trueFile은 UTF-8 텍스트를 읽고 씁니다. exists/isFile/isDirectory/size/listDirectory/createDirectories로 상태를 확인하고 디렉터리를 다룰 수 있습니다. FilePath.join/fileName/parent/extension/nameWithoutExtension/normalize는 경로 문자열을 다룹니다. 공통 입력은 /로 구분한 상대 경로이며 Windows 드라이브·역슬래시, 빈 경로와 파일 목록 순서·오류 메시지는 대상별로 다릅니다. native의 정규화 결과는 / 구분자를 사용하고 확장자에는 점이 없습니다.
copy·move는 대상 경로의 파일을 교체하며 원본이 없거나 디렉터리면 실패합니다. lastModified는 로컬 DateTime, createTempFile()은 이름이 겹치지 않는 새 빈 파일의 경로를 반환합니다. 바이트 API readBytes(path, maxBytes)·writeBytes·writeBytesExclusive는 native·Java·Kotlin·Python에서만 사용할 수 있고 다른 대상에서는 거절됩니다.
큰 파일을 한 번에 읽지 않으려면 TextReader.open(path)의 readLine()(끝이면 null)과 TextWriter.create(path)·TextWriter.append(path)의 write·writeLine을 사용하고 마지막에 close()를 호출합니다. close() 뒤의 다른 호출은 StateException입니다.
웹 예제 runner는 임의 파일 접근을 허용하지 않습니다. 제품의 File API가 있다는 사실을 runner의 권한 변경이나 파일 업로드 지원으로 해석하지 마세요.
인코딩·보안
섹션 제목: “인코딩·보안”unibase.encoding은 텍스트와 바이트를 바꾸고 unibase.security는 난수와 해시를 만듭니다. 바이트는 0~255 값의 List<int>입니다.
| 타입 | API | 공통 계약 |
|---|---|---|
Utf8 |
encode(text), decode(bytes) |
UTF-8이 아닌 바이트는 ArgumentException |
Base64 |
encode/decode, encodeUrl/decodeUrl |
표준 알파벳은 = 패딩, URL 알파벳은 패딩 없음 |
Hex |
encode, decode |
소문자로 쓰고 대·소문자 모두 읽음. 홀수 자릿수는 ArgumentException |
Uuid |
random() |
소문자 36자 버전 4 UUID |
SecureRandom |
bytes(count), nextInt(bound) |
운영체제 난수원 사용. count는 0~1048576, bound는 1 이상 |
Hash |
sha256(bytes), sha512(bytes) |
FIPS 180-4 값 |
Hmac |
sha256(key, bytes), verifySha256(key, bytes, mac) |
RFC 2104 값. 검증은 일정 시간 비교 |
PasswordHash |
hash(password), verify(password, stored) |
저장할 비밀번호 해시 텍스트와 일치 여부. 검증은 일정 시간 비교 |
Csv |
parse(text), write(rows) |
RFC 4180 행(List<List<string>>). 잘못된 따옴표는 ArgumentException |
브라우저 frontend에서는 Utf8·Base64·Hex·Uuid·SecureRandom을 사용할 수 있지만 Hash·Hmac은 생성 단계에서 BROWSER_API_NOT_APPLICABLE로 거절됩니다. 브라우저에는 동기 PasswordHash가 없으므로 비밀번호 해시는 서버에서 처리합니다. native는 Linux에서 libcrypto.so.3이 없으면 Hash·Hmac·PasswordHash가 StateException으로 실패합니다.
비밀번호 저장
섹션 제목: “비밀번호 저장”비밀번호는 Hash로 저장하지 말고 PasswordHash.hash의 결과 텍스트를 저장한 뒤 로그인할 때 verify로 확인합니다.
string stored = PasswordHash.hash(password);// 로그인할 때if (!PasswordHash.verify(attempt, stored)) { throw new ArgumentException("The user name or password is wrong.");}- 결과는
$pbkdf2-sha256$i=600000$<salt>$<result>형태입니다. PBKDF2-HMAC-SHA256 600000회, 호출마다 새 16바이트 salt와 32바이트 결과를 패딩 없는 표준 Base64로 씁니다. 모든 대상이 다른 대상이 만든 텍스트를 읽습니다. - 한 번의 호출은 의도적으로 눈에 띄는 시간이 걸립니다. 로그인 시도 횟수를 제한해 서버 부하가 되지 않게 하세요.
verify는 다른 형태의 텍스트나 반복 횟수가 1~10000000 밖인 텍스트에 예외 대신false를 반환합니다.
CSV 읽기·쓰기
섹션 제목: “CSV 읽기·쓰기”Csv는 모든 대상에서 같은 방식으로 쉼표 구분 값을 읽고 씁니다.
parse는 CRLF·LF 줄 끝과 마지막 줄 끝 생략을 받습니다. 빈 텍스트는 행이 없고, 빈 줄은 빈 필드 하나인 행입니다. 행마다 필드 수가 달라도 됩니다. 따옴표 필드에는 쉼표·줄바꿈과 따옴표 하나를 뜻하는""를 쓸 수 있습니다.- 닫히지 않은 따옴표, 닫는 따옴표 뒤의 텍스트, 따옴표 없는 필드 안의 따옴표는
ArgumentException입니다. 오류 문구는 대상별로 다릅니다. write는 쉼표·따옴표·줄바꿈이 있는 필드만 따옴표로 감싸고 마지막 줄을 포함한 모든 줄을 CRLF로 끝냅니다. 모든 행에 필드가 하나 이상이면Csv.parse(Csv.write(rows))는rows입니다.- 값은 바꾸지 않습니다. 스프레드시트는
=,+,-,@로 시작하는 필드를 수식으로 읽으므로, 사용자가 입력한 텍스트를 스프레드시트용 파일로 쓸 때는write전에 그런 필드 앞에'를 붙이세요.
프로세스·로그
섹션 제목: “프로세스·로그”main은 매개변수를 받지 않습니다. 명령줄 인수는 Process.arguments(), 환경 변수는 Process.environment(name)(없으면 null)으로 읽고, 종료 코드는 Process.exit(code)(0~255)로 지정합니다. Process.run(command)는 셸 없이 command[0] 프로그램을 실행하고 ProcessResult의 exitCode()·output()·errorOutput()을 반환합니다. 0이 아닌 종료 코드는 예외가 아니라 결과입니다.
List<string> command = ["git", "status", "--short"];ProcessResult result = Process.run(command);if (result.exitCode() != 0) { Console.error(result.errorOutput()); Process.exit(1);}print(result.output());HTTP 서비스의 소스에서는 Process.exit를 호출할 수 없습니다(Process.exit is not available in a request handler). Log.debug/info/warn/error는 한 줄씩 기록하며 콘솔·서버 프로그램은 표준 오류로, 브라우저는 콘솔로 씁니다. warn·error는 기본으로 기록되고 debug·info의 기록 여부와 줄 형식은 대상별로 다릅니다.
HTTPS 클라이언트
섹션 제목: “HTTPS 클라이언트”unibase.net의 HttpClient·HttpRequest·HttpCall·HttpResponse는 Java 콘솔·Spring Boot와 Python 콘솔·FastAPI 생성에서만 사용할 수 있고 다른 대상은 거절합니다. 실행 환경의 UNIBASE_HTTP_ALLOWED_ORIGINS에 허용할 origin을 쉼표로 나열해야 하며, 목록에 없는 origin과 평문 HTTP는 요청 전에 거절됩니다.
HttpClient client = HttpClient.create("https://api.example.com", 5000, 65536);HttpRequest request = HttpRequest.create("GET", "/orders") .query("customer", "김 민준") .header("Accept", "application/json");HttpResponse response = client.start(request).awaitResponse().requireSuccess();string text = response.body();create(origin, timeoutMillis, maxBytes)의 제한 시간은 160000ms, 본문 한도는 11048576바이트입니다. query(name, value)는 두 값을 Url.encode로 인코딩해 호출 순서대로 붙입니다. 리다이렉트는 따라가지 않고 자동 재시도도 없습니다. requireSuccess()는 2xx가 아니면 예외를 던집니다. Url.encode/decode는 단독으로도 사용할 수 있으며 공백은 %20으로 인코딩합니다.
Url.parse(text)는 받은 콜백 주소 같은 절대 URL을 RFC 3986 부록 B 방식으로 나누며 모든 대상에서 같은 부분을 반환합니다.
| 메서드 | 값 |
|---|---|
scheme() |
소문자 scheme(예: https) |
host() |
쓴 그대로의 host. IPv6 주소는 대괄호 없이 |
port() |
포트, 없으면 null |
path() |
인코딩된 그대로의 경로. 없으면 빈 문자열 |
query(), fragment() |
?·# 뒤의 텍스트(query는 인코딩된 그대로), 없으면 null |
queryValue(name), queryValues(name) |
같은 이름의 첫 값 또는 모든 값. +를 공백으로 디코딩하고 = 없는 부분은 빈 값 |
scheme·//·host가 없는 텍스트와 0~65535 밖의 포트는 ArgumentException이며, @ 앞의 사용자 이름·비밀번호는 버립니다.
변환 대상으로 옮길 때
섹션 제목: “변환 대상으로 옮길 때”native 성공 뒤에도 목표 대상의 분석·생성·빌드·실행을 각각 확인합니다. 서버의 DateTime·double·JsonValue 전달에는 HTTP/DTO/Mapper의 별도 직렬화·파싱 조건이 있습니다. 브라우저 frontend에서는 File·Console·Process·Socket·ServerSocket·Hash·Hmac이 적용되지 않아 생성이 거절됩니다. 비동기 람다를 컬렉션 함수에 전달하는 경우 완료 대기 제한도 확인하세요. 코드 생성에서 선택한 경로를 확인하세요.