본문으로 건너뛰기

randModifier

문자열 하나, 또는 배열 안의 모든 문자열 앞에 무작위 수식어를 붙입니다. OwlMistyOwl이 됩니다. 이 라이브러리가 만든 값뿐 아니라 어떤 문자열에도 쓸 수 있고, 값을 주지 않으면 수식어 자체를 돌려줍니다.

닉네임 옵션이 아니라 별도 함수인 이유는 randSuffix와 같습니다. 문자열을 장식하는 일은 닉네임이 아니라 문자열에 관한 것이기 때문입니다.

javascript
import { randAnimal, randModifier } from 'randino';

randModifier('Owl'); // 'MistyOwl'
randModifier('Owl', { separator: ' ' }); // 'Misty Owl'
randModifier(); // 'Misty'

randModifier(randAnimal({ language: 'en', count: 2 }));
// ['TwinklingLynx', 'OnyxCrane']
옵션타입기본값설명
valuestring | string[]장식할 대상. 옵션이 아니라 첫 번째 인자. 생략하면 수식어만
languageWordLanguageOption문자 체계수식어를 뽑을 언어
realismRandRealism'real'real은 언어가 쓰는 수식어를 뽑고, invented는 그 언어처럼 읽히기만 하는 수식어를 만들어냅니다
kindModifierKind | 'all''all'adjective는 어떤지를, action은 무엇을 하는지를 말합니다
separatorstring언어수식어와 값 사이에 들어감
random() => number무작위성을 어디서 가져올지. 난수원 고르기를 보세요

string에는 string을, string[]에는 string[]을 반환합니다.

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

randModifier(value: 'Owl'); // 'MistyOwl'
randModifier(value: 'Owl', separator: ' '); // 'Misty Owl'
randModifier(); // 'Misty'

randModifierAll(randAnimal(language: WordLanguage.en, count: 2));
// [TwinklingLynx, OnyxCrane]
파라미터타입기본값설명
valueString?null장식할 대상. 생략하면 수식어만
languageWordLanguage?문자 체계수식어를 뽑을 언어
realismRandRealismRandRealism.realreal은 실제 수식어, invented는 만들어낸 수식어
kindModifierKind?nulladjective는 어떤지를, action은 무엇을 하는지를 말합니다
separatorString?언어수식어와 값 사이에 들어감
randomRandom?null무작위성을 어디서 가져올지. 난수원 고르기를 보세요

String을 반환합니다. 리스트 형태는 randModifierAll입니다. randSuffix에 대한 randSuffixAll과 같습니다.

python
from randino import rand_animal, rand_modifier

rand_modifier("Owl")  # 'MistyOwl'
rand_modifier("Owl", separator=" ")  # 'Misty Owl'
rand_modifier()  # 'Misty'

rand_modifier(rand_animal(language="en", count=2))
# ['TwinklingLynx', 'OnyxCrane']
인자타입기본값설명
valuestr | list[str] | NoneNone장식할 대상. 위치 인자이며 나머지는 키워드 전용
languageWordLanguageOption | None문자 체계수식어를 뽑을 언어
realismRandRealism"real"real은 실제 수식어, invented는 만들어낸 수식어
kindModifierKind | Literal["all"]"all"adjective는 어떤지를, action은 무엇을 하는지를 말합니다
separatorstr | None언어수식어와 값 사이에 들어감
randomCallable[[], float] | NoneNone무작위성을 어디서 가져올지. 난수원 고르기를 보세요

str에는 str을, list[str]에는 list[str]을 반환하며 @overload가 이를 전달합니다.

값의 문자 체계가 언어를 정합니다

language를 생략하면 값 자체의 문자 체계를 보고 언어를 정합니다. 그래서 '고양이'에 영어 수식어가 붙지 않고 'Cat'에 한국어 수식어가 붙지 않습니다. 언어를 직접 넘기면 그쪽이 이깁니다. 'all'null"all"을 넘기면 값이 어떤 문자로 쓰였든 모든 언어를 섞습니다.

javascript
randModifier('고양이'); // '하얀고양이' — 문자 체계를 따라 한국어
randModifier('Cat'); // 'FlyingCat'
randModifier('고양이', { language: 'en' }); // 'Misty고양이'
dart
randModifier(value: '고양이'); // '하얀고양이' — 문자 체계를 따라 한국어
randModifier(value: 'Cat'); // 'FlyingCat'
randModifier(value: '고양이', language: WordLanguage.en); // 'Misty고양이'
python
rand_modifier("고양이")  # '하얀고양이' — 문자 체계를 따라 한국어
rand_modifier("Cat")  # 'FlyingCat'
rand_modifier("고양이", language="en")  # 'Misty고양이'

값이 없으면 읽을 문자 체계도 없으므로, 언어를 지정하지 않는 한 모든 언어가 대상이 됩니다.

수식어는 값에 맞춰 모양을 바꿉니다

수식어가 명사 옆에서 모양을 바꾸는 언어라면 randModifier는 값을 그 언어의 단어 풀에서 찾습니다. 풀에 있는 단어에는 성이 붙어 있으므로 수식어가 거기에 맞는 형태로 나옵니다. 풀에 없는 단어는 어미로 판단합니다. 스페인어는 -a, -ión, -dad를 여성으로 읽고, 러시아어는 를, 독일어는 어미로 알 수 있는 네 가지를 그렇게 읽습니다. 그래서 지어낸 단어에도 성에 맞는 수식어가 붙습니다.

단수형이 아예 없는 명사(ножницы, gafas, Jeans)도 같은 이유로 복수 태그를 답니다. 그래서 그 옆의 수식어도 복수형입니다.

javascript
randModifier('luna', { language: 'es' }); // 'luna dorada'
randModifier('gato', { language: 'es' }); // 'gato dorado'
randModifier('gafas', { language: 'es' }); // 'gafas doradas'
randModifier('Katze', { language: 'de' }); // 'blaue Katze'
randModifier('Zzyzx', { language: 'es' }); // 'Zzyzx dorado' — 모르는 단어
dart
randModifier(value: 'luna', language: WordLanguage.es); // 'luna dorada'
randModifier(value: 'gato', language: WordLanguage.es); // 'gato dorado'
randModifier(value: 'gafas', language: WordLanguage.es); // 'gafas doradas'
randModifier(value: 'Katze', language: WordLanguage.de); // 'blaue Katze'
randModifier(value: 'Zzyzx', language: WordLanguage.es); // 'Zzyzx dorado'
python
rand_modifier("luna", language="es")  # 'luna dorada'
rand_modifier("gato", language="es")  # 'gato dorado'
rand_modifier("gafas", language="es")  # 'gafas doradas'
rand_modifier("Katze", language="de")  # 'blaue Katze'
rand_modifier("Zzyzx", language="es")  # 'Zzyzx dorado' — 모르는 단어

수식어가 모양을 바꾸지 않는 ko, en, ja, zh, vi는 영향이 없습니다. 맞출 것이 없으니 어떤 값에든 어떤 수식어든 붙습니다.

kind가 수식어의 성격을 정합니다

수식어는 값이 어떤지를 말하거나 무엇을 하는지를 말하며, 둘은 서로 다른 풀입니다. kind가 그중 어느 쪽을 쓸지 정하고, 지정하지 않으면 둘 다 나옵니다.

javascript
randModifier({ language: 'en', kind: 'adjective' }); // 'Coral'
randModifier({ language: 'en', kind: 'action' }); // 'Bobbing'

randModifier('Owl', { language: 'en', kind: 'action' }); // 'CountingOwl'
randModifier('사자', { language: 'ko', kind: 'action' }); // '숨기는사자'
dart
randModifier(language: WordLanguage.en, kind: ModifierKind.adjective); // 'Coral'
randModifier(language: WordLanguage.en, kind: ModifierKind.action); // 'Bobbing'

randModifier(value: 'Owl', language: WordLanguage.en, kind: ModifierKind.action);
// 'CountingOwl'
randModifier(value: '사자', language: WordLanguage.ko, kind: ModifierKind.action);
// '숨기는사자'
python
rand_modifier(language="en", kind="adjective")  # 'Coral'
rand_modifier(language="en", kind="action")  # 'Bobbing'

rand_modifier("Owl", language="en", kind="action")  # 'CountingOwl'
rand_modifier("사자", language="ko", kind="action")  # '숨기는사자'

둘을 가른 것은 문법 때문입니다. 형용사에는 필요 없는 조사가 동작과 명사 사이에는 필요한 언어가 있어서, 중국어는 奔跑的狮子快乐狮子를 다르게 씁니다. randNicknameslots는 같은 구분을 형태 전체를 고르는 자리에서 씁니다.

값마다 새로 뽑은 수식어

한 번 뽑아 전체에 쓰지 않고 값마다 새로 뽑습니다. randSuffix가 값마다 토큰을 뽑는 것과 같으며, 배열을 넘길 이유도 이것입니다.

javascript
randModifier(['Owl', 'Owl', 'Owl']);
// ['SunnyOwl', 'WoolenOwl', 'TealOwl']
dart
randModifierAll(const ['Owl', 'Owl', 'Owl']);
// [SunnyOwl, WoolenOwl, TealOwl]
python
rand_modifier(["Owl", "Owl", "Owl"])
# ['SunnyOwl', 'WoolenOwl', 'TealOwl']

구분자와 만들어낸 수식어

separator의 기본값은 그 언어가 단어를 잇는 방식, 즉 붙여 쓰는 것입니다. realism은 모든 생성 함수가 가진 그 옵션입니다. real은 언어가 실제로 쓰는 수식어를 뽑고, invented는 그 언어처럼 읽히기만 하는 수식어를 만들어냅니다.

javascript
randModifier('Owl', { separator: '-' }); // 'Pointed-Owl'
randModifier({ language: 'en', realism: 'invented' }); // 'Snikith'
dart
randModifier(value: 'Owl', separator: '-'); // 'Pointed-Owl'
randModifier(language: WordLanguage.en, realism: RandRealism.invented); // 'Snikith'
python
rand_modifier("Owl", separator="-")  # 'Pointed-Owl'
rand_modifier(language="en", realism="invented")  # 'Snikith'

수식어와 명사는 닉네임이 쓰는 그 단어 풀입니다

단어 앞에 수식어를 붙이는 것은 randNickname이 대부분의 경우에 하는 일과 같습니다. randModifier(randAnimal())randModifier(value: randAnimal().first)rand_modifier(rand_animal())randNickname({ theme: 'animal' })은 같은 곳에서 단어를 꺼냅니다. 닉네임 생성기가 여기에 더하는 것은 형태와 길이 맞추기입니다. 뒤에 붙는 단어, 결과 전체가 들어가야 하는 범위, 그리고 두 단어가 경계에서 같은 글자를 반복할 때의 재추첨입니다.

함께 보기

  • randWord — 이 함수가 주로 앞에 붙는 단어들.
  • randSuffix — 단어 대신 무작위 토큰.
  • randNickname — 같은 단어 풀을 장식이 아니라 조합으로 쓰는 쪽.
  • 지원 언어 — 언어마다 수식어가 어디에 놓이고 언제 모양이 바뀌는지.

Released under the MIT License