3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

JavaScriptでScalaっぽく操作できる標準メソッドたち

Posted at

:star: この記事は、ただの集団 Advent Calendar 2020 の6日目です :star:

昨日は、同じグループのメンバーryoさんの、 JVで人事立ち上げてみて でした :hand_splayed:
毎年、開発部に絞らずにアドベンドカレンダーやってるから、いろんな部署のいろんな人の話が聞ける良い機会で私はこのアドベントカレンダーの時期が大好きです :heart_eyes:

はじめに

私は、社会人になってからプログラミングをはじめました。
そこからずっと主な言語は、Scalaでした :pencil:
他の言語のタスクが来たときは特にScalaだとこのメソッドあるけど、この言語にもあるのかなー。のようなモチベーションでググってます :computer:

今回は、新規プロダクトの立ち上げの際にVueを書く機会があったので、その時に発見したjsの発見をメモとして残します!
※サンプルコードには、TypeScriptも使用しています。

Option.getOrElse

私の大好きなメソッドの一つ

Scala

def getName(nameOpt: Option[String]): String = {
  nameOpt.getOrElse("名前の指定なし")
}

println(getName(Some("ando"))) // ando
println(getName(None)) // 名前の指定なし

JavaScript


function getName(nameOpt?: string): string {
  return nameOpt ?? "名前の指定なし" 
}

console.log(getName("ando")) // ando
console.log(getName(undefined)) // 名前の指定なし

可読性のScala、文字数的にはjsって感じ :thinking:

Collection.map

これも、私の大好きなメソッドの一つ

Scala

def suffixAsobase(hinatazakas: Seq[String]): Seq[String] = {
  hinatazakas.map(hinatazaka => s"${hinatazaka}あそばせ")
}

println(suffixAsobase(Seq("かとし", "こさかな", "みーぱん", "齊藤京子")))
// Seq(かとしあそばせ, こさかなあそばせ, みーぱんあそばせ, 齊藤京子あそばせ)

JavaScript

function suffixAsobase(hinatazakas: string[]): string[] {
  return hinatazakas.map(hinatazaka => hinatazaka + "あそばせ")
}

console.log(suffixAsobase(["かとし", "こさかな", "みーぱん", "齊藤京子"]))
// ["かとしあそばせ", "こさかなあそばせ", "みーぱんあそばせ", "齊藤京子あそばせ"] 

そのまま :point_up:

Collection.find / String.contains

Scala

val morningMusumes = Seq("ゴマキ", "鞘師", "まーちゃん", "尾形")
println(morningMusumes.find(_.contains("ゴ"))) // Some(ゴマキ)

JavaScript

const morningMusumes = ["ゴマキ", "鞘師", "まーちゃん", "尾形"]
console.log(morningMusumes.find(musume => musume.includes(""))) // ゴマキ

戻り値の型注意 :open_mouth:

Collection.headOption / Collection.tail

Scala

val nogizakas = Seq("生田", "なーちゃん", "白石麻衣", "かっきー", "久保ちゃん")
println(nogizakas.headOption) // Some(生田)
println(nogizakas.tail) // Seq(なーちゃん, 白石麻衣, かっきー, 久保ちゃん)

JavaScript

const nogizakas = ["生田", "なーちゃん", "白石麻衣", "かっきー", "久保ちゃん"]
console.log(nogizakas.shift()) // 生田
console.log(nogizakas) // ["なーちゃん", "白石麻衣", "かっきー", "久保ちゃん"]

mutable怖い :scream_cat:

Collection.init / Collection.last

Scala

val sakuras = Seq("天ちゃん", "理佐", "梨加", "ねる", "てち")
println(sakuras.last) // てち
println(sakuras.init) // Seq("天ちゃん", "理佐", "梨加", "ねる")

JavaScript

const sakuras = ["天ちゃん", "理佐", "梨加", "ねる", "てち"]
console.log(sakuras.pop()) // てち
console.log(sakuras) // ["天ちゃん", "理佐", "梨加", "ねる"]

終わりに

getOrElseので感動して書きはじめたけど、意外と数はなかったな :cry:
immutable推奨してる言語と、mutableなので厳密に完全一致じゃないので、ご指摘いただける際はここ以外でお願いします :pray:

(途中から、sample誰にしようかなーの趣旨に変わってたな :blush: )

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?