🚀

Jalan-jalan kodenya - 数字で学ぶインドネシア語

2024/04/30に公開

2023年7月、私は冒険心を胸にインドネシアへの旅行を控えていました。旅の準備として、現地の文化や言葉に触れるため、ある試みに挑戦しました。それは、数字をインドネシア語に変換するプログラムの開発です。

このプログラムは、単純な数字変換のみを実行します。実際のところ、現地での実用性はほとんどありませんでしたが、それは私にとっては重要ではありませんでした。なぜなら、この小さなプロジェクトはインドネシアへの旅をより深い思い出にしてくれたからです。
https://bahasa-indonesia.vercel.app/
https://github.com/ya-sny/Bahasa-Indonesia

プログラムの内容

プログラムは、以下の機能を備えています。

  • 0 から 99999999999999 までの数字をインドネシア語に変換する
  • 10 から 19 までの特殊な数字 (例: 11 = sebelas) も正しく処理する
  • 桁数に応じて変換処理を分岐させる

インドネシア語への変換処理

convertToIndonesian 関数は、文字列形式の数字 str_number を引数として取り、インドネシア語に変換した文字列を返す

  • まず、 0 から 9 までの一桁の数字をインドネシア語に対応付けるオブジェクトonesを定義
  • 次に、入力された数字str_numberを整数に変換parseIntし、桁数 number_of_digitsを取得
  const convertToIndonesian = (str_number: string): string => {
    const ones: { [key: string]: string } = {
      '0': '',
      '1': 'se',
      '2': 'dua ',
      '3': 'tiga ',
      '4': 'empat ',
      '5': 'lima ',
      '6': 'enam ',
      '7': 'tujuh ',
      '8': 'delapan ',
      '9': 'sembilan ',
    }
    const int_number: number = parseInt(str_number)
    const number_of_digits: number = str_number.length

桁数による変換処理 (convert3Digits 関数)

桁数に応じて変換処理を行うconvert3Digits関数は、桁数number_of_digitsと変換後の単語wordを引数として取り、変換された文字列を返す

    const convert3Digits = (number_of_digits: number, word: string): string => {
      switch (number_of_digits) {
        case 1:
          return (str_number[0] !== '1' ? ones[str_number[0]] + `${word} ` : `satu ${word} `) + convertToIndonesian(str_number.substring(1))
        case 2:
          return convertToIndonesian(str_number.substring(0, 2)) + `${word} ` + convertToIndonesian(str_number.substring(2))
        case 3:
          return convertToIndonesian(str_number.substring(0, 3)) + `${word} ` + convertToIndonesian('0' + str_number.substring(3))
      }
      return 'null'
    }

特殊ケースの処理

convertToIndonesian 関数の冒頭では、特殊ケースを処理

  • 最初の文字が 0 で、桁数が 2 以上ある場合は、先頭の 0 を除いて残りの桁を convertToIndonesian 関数で変換
  • 数字が 10 から 19 までの場合は、下二桁目str_number[1]onesオブジェクトを使って変換し、"belas"に接頭辞を連結する
  if (str_number[0] === '0' && str_number.length > 1) return convertToIndonesian(str_number.substring(1))
  if (int_number > 10 && int_number < 20) return ones[str_number[1]] + 'belas '

変換処理の分岐

convertToIndonesian関数では、 switch文を使って桁数によって処理を分岐させる

  • 1桁の場合は、 ones オブジェクトを使って変換する(1 の場合は特殊処理)
  • 2 桁から 4 桁の場合は、先頭文字を ones オブジェクトで変換し、 puluh (十), ratus (百), - ribu (千) をそれぞれ桁数に応じて連結し、残りの桁は再帰的に convertToIndonesian 関数で変換する
  • 5 と 6 桁は、convert3Digits 関数を呼び出して変換する (変換単位は "ribu")
  • 7 から 9 桁は、convert3Digits 関数を呼び出して変換する (変換単位は "juta")
  • 10 から 12 桁は、convert3Digits 関数を呼び出して変換する (変換単位は "milyar")
  • 13 から 15 桁は、convert3Digits 関数を呼び出して変換する (変換単位は "trilyun")
    switch (number_of_digits) {
      case 1:
        return int_number !== 1 ? ones[int_number] : 'satu '
      case 2:
      case 3:
      case 4:
        return ones[str_number[0]] + ['puluh ', 'ratus ', 'ribu '][number_of_digits - 2] + convertToIndonesian(str_number.substring(1))
      case 5:
      case 6:
        return convert3Digits(number_of_digits - 3, 'ribu')
      case 7:
      case 8:
      case 9:
        return convert3Digits(number_of_digits - 6, 'juta')
      case 10:
      case 11:
      case 12:
        return convert3Digits(number_of_digits - 9, 'milyar')
      case 13:
      case 14:
      case 15:
        return convert3Digits(number_of_digits - 12, 'trilyun')
    }

まとめ

プログラミングの知識を活かして、インドネシア語学習のツール作成ができ、インドネシア語の数字体系について深い理解得ることができました。
インドネシア旅行と数字変換プログラムは、私にとって貴重な経験となりました。このブログ記事を通して、皆さんにもインドネシア語学習の魅力や旅の楽しさを伝えられたら幸いです。

Discussion