본문으로 건너뛰기

상수

생성기가 받아들이는 목록과, 모든 숫자 옵션이 제한되는 절대 범위입니다. 범위를 벗어난 값에 예외를 던지지는 않습니다. count-10이면 아무것도 반환하지 않고, 100만이면 1만 개를 반환합니다.

공통 범위

모든 생성 함수는 같은 방식으로 개수를 세고, 값을 제한하고, 중복을 걸러냅니다. 그래서 범위 상수도 생성 함수마다 하나씩 두지 않고 하나로 묶여 있습니다.

javascript
import {
	RAND_COUNT_MAX,
	RAND_LENGTH_MAX,
	RAND_LENGTH_MIN,
	RAND_SENTENCE_LENGTH_MAX
} from 'randino';
이름타입
RAND_LENGTH_MINnumber1
RAND_LENGTH_MAXnumber40
RAND_SENTENCE_LENGTH_MAXnumber200
RAND_COUNT_MAXnumber10000
dart
import 'package:randino/randino.dart';
이름타입
randLengthMinint1
randLengthMaxint40
randSentenceLengthMaxint200
randCountMaxint10000
python
from randino import (
    RAND_COUNT_MAX,
    RAND_LENGTH_MAX,
    RAND_LENGTH_MIN,
    RAND_SENTENCE_LENGTH_MAX,
)
이름타입
RAND_LENGTH_MINint1
RAND_LENGTH_MAXint40
RAND_SENTENCE_LENGTH_MAXint200
RAND_COUNT_MAXint10000

길이 옵션은 생성 결과의 글자 수를 기준으로 1 … 40으로 제한됩니다. randSentence만은 상한이 200입니다. 이름과 단어와 닉네임은 길어야 세 단어지만 문장은 여러 단어이기 때문입니다. count0 … 10000으로 제한되는데, 상한이 있는 이유는 unique를 켠 채로 개수를 제한하지 않으면 이미 바닥난 후보에서 계속 다시 뽑느라 오래 걸릴 수 있기 때문입니다.

이름

javascript
import { NAME_LANGUAGES } from 'randino';
이름타입
NAME_LANGUAGESNameLanguage[]지원하는 모든 이름 언어
dart
import 'package:randino/randino.dart';
이름타입
nameLanguagesList<NameLanguage>지원하는 모든 이름 언어
python
from randino import NAME_LANGUAGES
이름타입
NAME_LANGUAGEStuple[NameLanguage, …]지원하는 모든 이름 언어

닉네임

javascript
import { WORD_LANGUAGES, WORD_THEMES } from 'randino';
이름타입
WORD_LANGUAGESWordLanguage[]지원하는 모든 닉네임 언어
WORD_THEMESWordTheme[]29개 테마 전체
dart
import 'package:randino/randino.dart';
이름타입
wordLanguagesList<WordLanguage>지원하는 모든 닉네임 언어
wordThemesList<WordTheme>29개 테마 전체
python
from randino import WORD_LANGUAGES, WORD_THEMES
이름타입
WORD_LANGUAGEStuple[WordLanguage, …]지원하는 모든 닉네임 언어
WORD_THEMEStuple[WordTheme, …]29개 테마 전체

접미사와 접두사

javascript
import {
	AFFIX_CHARSET,
	AFFIX_LENGTH_DEFAULT,
	AFFIX_LENGTH_MAX,
	AFFIX_SEPARATOR_DEFAULT
} from 'randino';
이름타입
AFFIX_LENGTH_DEFAULTnumber5
AFFIX_LENGTH_MAXnumber32
AFFIX_SEPARATOR_DEFAULTstring'_'
AFFIX_CHARSETstring토큰의 기본 문자 집합
dart
import 'package:randino/randino.dart';
이름타입
affixLengthDefaultint5
affixLengthMaxint32
affixSeparatorDefaultString'_'
affixCharsetString토큰의 기본 문자 집합
python
from randino import (
    AFFIX_CHARSET,
    AFFIX_LENGTH_DEFAULT,
    AFFIX_LENGTH_MAX,
    AFFIX_SEPARATOR_DEFAULT,
)
이름타입
AFFIX_LENGTH_DEFAULTint5
AFFIX_LENGTH_MAXint32
AFFIX_SEPARATOR_DEFAULTstr"_"
AFFIX_CHARSETstr토큰의 기본 문자 집합

이 문자 집합은 영숫자에서 헷갈리는 쌍을 뺀 것입니다. 0O가 없고 1, l, I도 없습니다. 접미사는 누군가 화면에서 읽고 다른 화면에 입력하는 값이며, 그 다섯 글자가 바로 그 지점에서 문제를 일으킵니다.

charsetcharsetcharset으로 좁히거나 넓힐 수 있습니다. 알파벳 전체가 아니라 기본값에서 출발해 줄이면 이 성질이 유지됩니다.
javascript
import { AFFIX_CHARSET, randSuffix } from 'randino';

// 숫자만.
randSuffix('MistyOwl', { charset: '0123456789' });

// 기본값에서 대문자를 뺀 것.
randSuffix('MistyOwl', { charset: AFFIX_CHARSET.replace(/[A-Z]/g, '') });
dart
import 'package:randino/randino.dart';

// 숫자만.
randSuffix('MistyOwl', charset: '0123456789');

// 기본값에서 대문자를 뺀 것.
randSuffix('MistyOwl', charset: affixCharset.replaceAll(RegExp('[A-Z]'), ''));
python
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되므로, 옵션 객체에 따로 타입을 붙일 수 있습니다.

typescript
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'을 더한 유니온입니다. NameLanguageOptionNameLanguage | 'all'입니다. 'all'이 유효한 답이 아닌 자리에서는 더 좁은 쪽을 쓰면 되고, 헬퍼가 그렇게 하고 있습니다.

모든 공개 타입이 함수와 함께 export됩니다.

dart
import 'package:randino/randino.dart';

// enum
NameLanguage, NameGender, NameScript
WordLanguage, WordTheme

// 값
LengthRange, NameDetail, NicknameDetail

…Option 타입도 없고 all 멤버도 없습니다. null인 enum이 "전부"를 뜻하므로, 쓰지 않은 파라미터가 이미 섞인 결과를 의미합니다. 그래서 헬퍼들도 더 좁은 타입이 아니라 생성기와 같은 타입을 받습니다.

모든 공개 타입을 함수와 함께 import할 수 있으며, 패키지에 py.typed 마커가 포함되어 있어 타입 검사기가 이 주석들을 그대로 읽습니다.

python
from randino import (
    NameDetail,
    NameGender,
    NameGenderOption,
    NameLanguage,
    NameLanguageOption,
    NameScript,
    NicknameDetail,
    WordLanguage,
    WordLanguageOption,
    WordTheme,
    WordThemeOption,
    RandOutput,
)

language: NameLanguageOption = "ko"

클래스가 아니라 Literal 타입이므로, NameLanguage를 기대하는 자리에 "kr"를 넘기면 거부됩니다. …Option 타입은 여기에 "all"을 더한 것으로, NameLanguageOptionNameLanguage | Literal["all"]입니다. "all"이 유효한 답이 아닌 자리에서는 더 좁은 쪽을 쓰세요.

import할 옵션 타입은 없습니다. 인자가 객체가 아니라 키워드 전용이므로 타입을 붙일 대상 자체가 없습니다.

함께 보기

  • 지원 언어 — 각 언어 코드가 다루는 범위.
  • 테마 — 각 테마가 담고 있는 것.

Released under the MIT License