質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

1893閲覧

javaScript 変数命名規則について

nobodytolove123

総合スコア61

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/05/24 13:54

いつもお世話になっております。

表題の通り、javaScriptの変数命名規則についての質問です。
素朴な質問なのですが、mapの第一引数は皆さんどのように変数名を付けていますか?

僕は以前map(i => hoge(i))の様に自分が認識できる変数名のつけ方をしていましたが考え直し以下の様に修正しました。

js

1// NodeListを取得 2const audioList = document.querySelectorAll("audio") 3 4// 取得したDOMのクラス名をそのまま変数名につけている 5Array.from(audioList).map((audioList, procIndex) => { 6 // 割愛 7})

以上の様に修正をしたのですが、少しめんどくささが残ります。
下記具体例です。

js

1 2import request from 'superagent' // Ajaxライブラリ 3 4// バイナリをAjaxで取得する 5const getAudioBinaryChunk = (request_nane) => { 6 if (!request_name) null // 割愛 7 return new Promise((resolve, reject) => { 8 request 9 .post("/content") 10 .query({query: request_name}) 11 .end((err, res) => { 12 if(err) null // 割愛 13 resolve(res.body) 14 }) 15 }) 16} 17 18// 元の変数名が長いと、後々めんどくさい 19const audioBinaryChunk = getAudioBinaryChunk("hoge") 20 21// Promiseの引数はresultとかでいいと思うが、mapはどうか疑問 22audioBinaryChunk.then((result) => { 23 result.map((audioBinaryChunk) => { 24 const audioType = audioBinaryChunk.slice(1,8) 25 // ...etc 26 }) 27})

上記の例は少し現実味が薄いですが、伝えたいことはコメントの通りです。

変数命名などのノウハウや単純に上記のコードのご指摘があれば幸いです。

以上宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

素朴な質問なのですが、mapの第一引数は皆さんどのように変数名を付けていますか?

以下を回答の前提としています。

  • 質問内でのmapArray.prototype.map()を指すということ
  • Array.prototype.map()の第一引数はcallback関数なので、質問はそのcallback関数の第一引数の命名についてであること

匿名関数を渡す場合

const students = [ { id: 1, name: 'John', score: 92 }, { id: 2, name: 'Mike', score: 89 }, { id: 3, name: 'Ken', score: 78 }, ] const scores = students.map(function(student) { return student.score; }); console.log(scores); // [ 92, 89, 78 ]

例としてstudents配列があるとした場合、mapメソッドに渡すコールバック関数の第一引数には配列内の個々のstudentを表すオブジェクトが渡ってくる訳なので、そのまま、studentと命名するのが自然かなと思います。

Array.from(audioList).map((audioList) => { // 割愛 })

前述の説明をふまえると、質問文に掲載のコードの場合、mapメソッドに渡すコールバック関数の第一引数には配列が渡っているように読めてしまいます。

const audioList = Array.from(nodeList); audioList.map((audioList, index, array) => { // 割愛 })

Array.prototype.mapメソッドに渡すコールバック関数の第3引数には「mapが実行されている配列(audioList)」が渡ってきますので、第一引数の名前が複数形や「xxxList」のようなものだと、第3引数に渡ってくる配列と紛らわしくなると思います。(mapメソッドを使い慣れてる人は大丈夫でしょうけども)

Array.from(audioList).map((element) => { // 割愛 })

なので、elementaudioElementあたりが分かりやすいのではないでしょうか。

名前付き関数を渡す場合

students.map(function(student) { return student.score; });

無名関数の場合は、その場だけの用途になるので、上記のコードのようにstudentと具体的な命名で良いと思いますし、個人的には分かりやすいのでより好ましいとも思います。

const students = [ { id: 1, name: 'John', score: 92 }, { id: 2, name: 'Mike', score: 89 }, { id: 3, name: 'Ken', score: 78 }, ] const products = [ { id: 1, name: 'apple', price: 980 }, { id: 2, name: 'banana', price: 1480 }, { id: 3, name: 'peach', price: 1200 }, ] // `object`や`obj`のような抽象度を上げた名前 const prop = key => object => object[key]; // objectかどうかのチェックは省略 const getScore = prop('score'); const getPrice = prop('price'); const scores = students.map(getScore); const prices = products.map(getPrice); console.log(scores); // [ 92, 89, 78 ] console.log(prices); // [ 980, 1480, 1200 ]

逆に使いまわせるように関数を変数に代入し、mapメソッドに渡すような場合ですと、汎用性を気にする必要があるので、命名も抽象度を上げることになると思います。

上記の例で言えば、objectという引数名が、mapメソッドに渡すコールバック関数の第一引数に該当することになります。

投稿2018/05/25 05:20

編集2018/05/25 05:29
HayatoKamono

総合スコア2415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nobodytolove123

2018/05/25 13:35

ご回答ありがとうございます! 具体的なコードでご説明頂き、とても参考になりました。 Listに対してElementで個要素を表現、汎用性を持たせるために命名の抽象度を上げる等、とても納得できます...。 是非参考にさせて頂きたいと思います、ありがとうございます!
guest

0

1つの言語に限ったことではないですが、

  • 3か月後に読んだときに自分でも分かるような名前、
  • 他の人が読んでも何が起きているか分かるような名前

であれば基本良いと思います。
あとは現場で命名規則・コーディング規約があればそれに従う形で。

「コメントは3か月後の自分に向けて書くもの」のような名言も見たことがあります。

あとは下記の記事なども参考にしてみてください。

投稿2018/05/24 21:07

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nobodytolove123

2018/05/25 13:17

ご回答ありがとうございます、3ヶ月というのがなんとも絶妙ですね。 Qiitaでの投稿記事がとても参考になりました! Qiitaで検索の発想は正直無かったのでとても助かります、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問