Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@erikaadno

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

: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: )

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?