Esperanto でプログラムを書こう！(ネタ)

こちらは2024年12月の社内LT会で使用したものです。

---

# 問題
- 英語辛い！
- 英語難しい！
- 英語分からない！

---
## 問題1: 品詞・時制
```typescript
xxx.userLogin // これは何？
```

---
```typescript
// userのlogin状態
xxx.userLogin = false;
// userをloginさせる
xxx.userLogin = (user: User) => {
// loginしたuser
xxx.userLogin = user;
// こう書くのが推奨されている
xxx.isUserLoggedIn = False;
xxx.loginUser = (user: User) => {
xxx.loggedInUser = user;
```
---
## 問題2: 文法
```typescript
// タスクが完了したか
function isTaskCompleted(): boolean {
// ユーザーがタスクを実行したか
function hasUserExecutedTask(): boolean {
// タスクが実行されたことがあるか
function hasTaskbeenExecuted(): bookean { // ???
```

---
```typescript
// Userが選択されたか Userは選択される側
function isUserSelected(): boolean {
// Userが選択しているか Userは選択する側
function isUserSelecting(): boolean {
// Userが選択を行ったか Userは選択する側
function hasUserSelected(): boolean {
// Userが選択されたことがあるか Userは選択される側
function hasUserbeenSelected(): boolean { // ???
```

---
## 問題3: 語彙・語形変化
```typescript
// ?
function hasUserSpoken(): boolean {
// ?
let datum = 0;
// ?
function retrieveInfo(): Info {
// これは分かる
function completionTransfar(): void {
```
---

```typescript
// spokenはspeakの過去分詞形
function hasUserSpoken(): boolean {
// datumはdataの単数形（dataが複数形）
let data = [datum, datum, datum]
// retrieveは「手に入れる」 fetchみたいな
function retrieveInfo(): Info {
// completionは名詞 completeが動詞 あとtransf"e"r
function completeTransfer(): void {
```

---
# 解決策
そうだ、
エスペラントを使おう！

---
## Esperantoとは
`人工言語`・`計画言語`の一つ。
世界中の人が使える共通語を目指して作られた言語たちの中でも、
現在一番広く普及している。(世界100万人くらい？)

---
Esperanto の特徴
- アルファベットだけで表記できる
    - 一応`ŝ` `ĝ`のような文字を使うが、`sx` `gx`で代用可能
- 文法が簡単で規則的
- 語彙も割と規則的に予想できる

---
実際にやってみる
まずはEsperantoの文法から

---
名詞は語幹+o
- タスク: tasko
- あいさつ: saluto
- ログイン: ensaluto
- 世界: mondo

---
動詞の基本形は語幹+i
- 利用する（こと）: uzi
- ログインする（こと）: ensaluti
- ある・である（こと）: esti

---
実際に動詞を使う場合は、現在時制「-as」で終わることが多い
- 利用する: uzas
- ログインする: ensalutas
- ある・である: estas

---
「○○が（主語）」ではなく「○○を（目的語）」を明示する（対格）ために-onにする
- タスクを: taskon
- ユーザーを: uzanton
- あいさつを: saluton = こんにちは！

---
形容詞は語幹+a
- 赤い: ruĝa/rugxa
- 計算機の: komptila
(名詞の最後を-aにして「○○の」という意味で使うこともある）

---
「○○する・している」は-anta
- 計算中の: kalkulanta

「○○する・している人」は-anto
- ユーザー: uzanto
- 管理者: administranto

---
# 実例

---
## 実例1
```typescript
xxx.UzantoEnsaluto // ユーザーのログイン
// Cxu ~: ○○かどうか
// ~inta: ○○した、し終わった（形容）
xxx.cxuUzantoEstasEnsalutinta // ユーザーがログインしたか
// ~ig: ○○させる（自動詞の他動詞化）
xxx.EnsalutigiUzanton // ユーザーをログインさせる
```

---
## 実例2
```typescript
// タスクが完了したか
// Kompliti: 完了する・終わらせる
// -ig: ○○する（他動詞の自動詞化）
// -ita: ○○され終えた、されてしまった
function cxuTaskoEstasKompletigita(): boolean {
```

---
```typescript
// ユーザーがタスクを実行したか
// Plenumi: 実行する
// -is: ○○した（過去形）
function CxuUzantoPlenumisTaskon(): boolean {
// タスクが実行されたことがあるか
// ※ Estis=Est-is: あった・であった
// ※ Plenumita=Plenum-ita: 実行され終えた
function CxuTaskoEstisPlenumita(): boolean {
```
---
```typescript
// Elekti: 選ぶ
function cxuUzantoEstasElektita(): boolean {
function cxuUzantoElektas(): boolean {
function cxuUzantoElektis(): boolean {
function cxuUzantoEstisElektita(): boolean {
// あるいはoni: 誰か・何者か　を使って
function cxuOniElektisUzanton: boolean {
// Iam: ～～ことがある、いつだか、時々
function cxuOniElektisUzantonIam: boolean {
```


---
## 実例3

```typescript
// Paroli: 話す、しゃべる
function CxuUzantoParolis(): boolean {
// -j: 複数形
let datumoj = [datumo, datumo, datumo]
// akiri: 手に入れる
function akiriInformon(): Info {
// transigon: 移送を・移動を
function kompletigiTransigon(): void {
```

---
# まとめ
そんなに良くないかも。
英語勉強するしかないかも。
辛い

---
おまけ
```typescript
console.log("saluton, mondo!");
```