상수
생성기가 받아들이는 목록과, 모든 숫자 옵션이 제한되는 절대 범위입니다. 범위를 벗어난 값에 예외를 던지지는 않습니다. count가 -10이면 아무것도 반환하지 않고, 100만이면 1만 개를 반환합니다.
공통 범위
모든 생성 함수는 같은 방식으로 개수를 세고, 값을 제한하고, 중복을 걸러냅니다. 그래서 범위 상수도 생성 함수마다 하나씩 두지 않고 하나로 묶여 있습니다.
import {
RAND_COUNT_MAX,
RAND_LENGTH_MAX,
RAND_LENGTH_MIN,
RAND_SENTENCE_LENGTH_MAX
} from 'randino';| 이름 | 타입 | 값 |
|---|---|---|
RAND_LENGTH_MIN | number | 1 |
RAND_LENGTH_MAX | number | 40 |
RAND_SENTENCE_LENGTH_MAX | number | 200 |
RAND_COUNT_MAX | number | 10000 |
import 'package:randino/randino.dart';| 이름 | 타입 | 값 |
|---|---|---|
randLengthMin | int | 1 |
randLengthMax | int | 40 |
randSentenceLengthMax | int | 200 |
randCountMax | int | 10000 |
from randino import (
RAND_COUNT_MAX,
RAND_LENGTH_MAX,
RAND_LENGTH_MIN,
RAND_SENTENCE_LENGTH_MAX,
)| 이름 | 타입 | 값 |
|---|---|---|
RAND_LENGTH_MIN | int | 1 |
RAND_LENGTH_MAX | int | 40 |
RAND_SENTENCE_LENGTH_MAX | int | 200 |
RAND_COUNT_MAX | int | 10000 |
길이 옵션은 생성 결과의 글자 수를 기준으로 1 … 40으로 제한됩니다. randSentence만은 상한이 200입니다. 이름과 단어와 닉네임은 길어야 세 단어지만 문장은 여러 단어이기 때문입니다. count는 0 … 10000으로 제한되는데, 상한이 있는 이유는 unique를 켠 채로 개수를 제한하지 않으면 이미 바닥난 후보에서 계속 다시 뽑느라 오래 걸릴 수 있기 때문입니다.
이름
import { NAME_LANGUAGES } from 'randino';| 이름 | 타입 | 값 |
|---|---|---|
NAME_LANGUAGES | NameLanguage[] | 지원하는 모든 이름 언어 |
import 'package:randino/randino.dart';| 이름 | 타입 | 값 |
|---|---|---|
nameLanguages | List<NameLanguage> | 지원하는 모든 이름 언어 |
from randino import NAME_LANGUAGES| 이름 | 타입 | 값 |
|---|---|---|
NAME_LANGUAGES | tuple[NameLanguage, …] | 지원하는 모든 이름 언어 |
닉네임
import { WORD_LANGUAGES, WORD_THEMES } from 'randino';| 이름 | 타입 | 값 |
|---|---|---|
WORD_LANGUAGES | WordLanguage[] | 지원하는 모든 닉네임 언어 |
WORD_THEMES | WordTheme[] | 29개 테마 전체 |
import 'package:randino/randino.dart';| 이름 | 타입 | 값 |
|---|---|---|
wordLanguages | List<WordLanguage> | 지원하는 모든 닉네임 언어 |
wordThemes | List<WordTheme> | 29개 테마 전체 |
from randino import WORD_LANGUAGES, WORD_THEMES| 이름 | 타입 | 값 |
|---|---|---|
WORD_LANGUAGES | tuple[WordLanguage, …] | 지원하는 모든 닉네임 언어 |
WORD_THEMES | tuple[WordTheme, …] | 29개 테마 전체 |
접미사와 접두사
import {
AFFIX_CHARSET,
AFFIX_LENGTH_DEFAULT,
AFFIX_LENGTH_MAX,
AFFIX_SEPARATOR_DEFAULT
} from 'randino';| 이름 | 타입 | 값 |
|---|---|---|
AFFIX_LENGTH_DEFAULT | number | 5 |
AFFIX_LENGTH_MAX | number | 32 |
AFFIX_SEPARATOR_DEFAULT | string | '_' |
AFFIX_CHARSET | string | 토큰의 기본 문자 집합 |
import 'package:randino/randino.dart';| 이름 | 타입 | 값 |
|---|---|---|
affixLengthDefault | int | 5 |
affixLengthMax | int | 32 |
affixSeparatorDefault | String | '_' |
affixCharset | String | 토큰의 기본 문자 집합 |
from randino import (
AFFIX_CHARSET,
AFFIX_LENGTH_DEFAULT,
AFFIX_LENGTH_MAX,
AFFIX_SEPARATOR_DEFAULT,
)| 이름 | 타입 | 값 |
|---|---|---|
AFFIX_LENGTH_DEFAULT | int | 5 |
AFFIX_LENGTH_MAX | int | 32 |
AFFIX_SEPARATOR_DEFAULT | str | "_" |
AFFIX_CHARSET | str | 토큰의 기본 문자 집합 |
이 문자 집합은 영숫자에서 헷갈리는 쌍을 뺀 것입니다. 0과 O가 없고 1, l, I도 없습니다. 접미사는 누군가 화면에서 읽고 다른 화면에 입력하는 값이며, 그 다섯 글자가 바로 그 지점에서 문제를 일으킵니다.
charsetcharsetcharset으로 좁히거나 넓힐 수 있습니다. 알파벳 전체가 아니라 기본값에서 출발해 줄이면 이 성질이 유지됩니다.import { AFFIX_CHARSET, randSuffix } from 'randino';
// 숫자만.
randSuffix('MistyOwl', { charset: '0123456789' });
// 기본값에서 대문자를 뺀 것.
randSuffix('MistyOwl', { charset: AFFIX_CHARSET.replace(/[A-Z]/g, '') });import 'package:randino/randino.dart';
// 숫자만.
randSuffix('MistyOwl', charset: '0123456789');
// 기본값에서 대문자를 뺀 것.
randSuffix('MistyOwl', charset: affixCharset.replaceAll(RegExp('[A-Z]'), ''));from randino import AFFIX_CHARSET, rand_suffix
# 숫자만.
rand_suffix("MistyOwl", charset="0123456789")
# 기본값에서 대문자를 뺀 것.
rand_suffix("MistyOwl", charset="".join(c for c in AFFIX_CHARSET if not c.isupper()))타입
모든 공개 타입이 함수와 함께 export되므로, 옵션 객체에 따로 타입을 붙일 수 있습니다.
import type {
NameDetail,
NameGender,
NameGenderOption,
NameLanguage,
NameLanguageOption,
NameScript,
NicknameDetail,
WordLanguage,
WordLanguageOption,
WordTheme,
WordThemeOption,
RandNameOptions,
RandNicknameOptions,
RandOutput
} from 'randino';
const options: RandNameOptions = { language: 'ko', count: 3 };…Option으로 끝나는 타입은 언어나 테마에 'all'을 더한 유니온입니다. NameLanguageOption은 NameLanguage | 'all'입니다. 'all'이 유효한 답이 아닌 자리에서는 더 좁은 쪽을 쓰면 되고, 헬퍼가 그렇게 하고 있습니다.
모든 공개 타입이 함수와 함께 export됩니다.
import 'package:randino/randino.dart';
// enum
NameLanguage, NameGender, NameScript
WordLanguage, WordTheme
// 값
LengthRange, NameDetail, NicknameDetail…Option 타입도 없고 all 멤버도 없습니다. null인 enum이 "전부"를 뜻하므로, 쓰지 않은 파라미터가 이미 섞인 결과를 의미합니다. 그래서 헬퍼들도 더 좁은 타입이 아니라 생성기와 같은 타입을 받습니다.
모든 공개 타입을 함수와 함께 import할 수 있으며, 패키지에 py.typed 마커가 포함되어 있어 타입 검사기가 이 주석들을 그대로 읽습니다.
from randino import (
NameDetail,
NameGender,
NameGenderOption,
NameLanguage,
NameLanguageOption,
NameScript,
NicknameDetail,
WordLanguage,
WordLanguageOption,
WordTheme,
WordThemeOption,
RandOutput,
)
language: NameLanguageOption = "ko"클래스가 아니라 Literal 타입이므로, NameLanguage를 기대하는 자리에 "kr"를 넘기면 거부됩니다. …Option 타입은 여기에 "all"을 더한 것으로, NameLanguageOption은 NameLanguage | Literal["all"]입니다. "all"이 유효한 답이 아닌 자리에서는 더 좁은 쪽을 쓰세요.
import할 옵션 타입은 없습니다. 인자가 객체가 아니라 키워드 전용이므로 타입을 붙일 대상 자체가 없습니다.