LoginSignup
15
3

More than 1 year has passed since last update.

個人的にNim言語の素晴らしいところ6選

Last updated at Posted at 2022-12-05

概要

こんにちは。

普段業務ではScalaをメインに書いているものですが、
ちょっとした調査スクリプトを書いたり、雑なスクリプトを作りたい時は、Pythonやシェルスクリプトを採用することが多いです。

しかしながら、
普段Scalaを書いている身としましては、
Pythonは、list.map(???).filter(???)...のようにメソッドチェーンでコレクション処理をやりずらかったり、ラムダ式を定義するのにlambdaキーワードをタイピングしたりと、若干の煩わしさを感じることもあります。

そこで、現在、Nimのような新しめの言語を使って、雑なスクリプトを作れないかと検討していまして、
その過程で見つけたNim言語の素晴らしいところを6個共有できればと思います m(_ _)m

1. map, filter, foldlが使いやすい!

以下のコードは、NimのmapIt, filterIt, foldlの使用例です。
mapIt, filterItについては、単に引数itを使う式を丸括弧の中に書いてやるだけで、
ラムダ式を渡すことができます。

map, filter, foldl
import sequtils
import sugar

echo [1, 2, 3, 4, 5, 6].mapIt(it * 2) # @[2, 4, 6, 8, 10, 12]
echo [1, 2, 3, 4, 5, 6].filterIt(it %% 2 == 0) # @[2, 4, 6]
echo [1, 1, 1].foldl(a + b) # 3

echo [1, 2, 3, 4, 5, 6].map(x => x * 2) # @[2, 4, 6, 8, 10, 12]
echo [1, 2, 3, 4, 5, 6].filter(x => x %% 2 == 0) # @[2, 4, 6]

2. ドット演算子で関数を呼び出す

UFCSをサポートしているので、オブジェクト指向言語におけるメソッドのように関数に値を渡すことが可能です。

proc addOne(num: int): int =
    num + 1

echo 10.addOne # 11
echo addOne(10) # 11(普通に呼び出した場合)

3. 変数再代入禁止

letで変数を定義すると再代入を禁止することができます。
varで定義すると再代入可能です。

var x = 1
x = 10
echo x

let y = 2
y = 10 # コンパイルエラーに..
echo y

4. タプルが便利

タプルの各要素に名前をつけることができます。

type
  Person = tuple
    name: string
    age: int

let person: Person = (name: "あああ", age: 20)
echo person.name # あああ
echo person.age # 20

5. 文字列のjoin

Pythonですと、"-".join([1, 2, 3, ...])のような若干トリッキーなjoinを書くことになりますが、
Nimですと、自然にjoinすることができます。

import strutils

echo [1, 2, 3, 4, 5, 6].join("-") # 1-2-3-4-5-6

6. importが直感的

多くのプログラミング言語ですと.繋ぎでimportしますが、Nimですと、/で階層を繋いでいます。
地味に分かりやすいです。

import std/json
15
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
3