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

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

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

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

Q&A

解決済

1回答

1243閲覧

JavaScriptでの引数からオブジェクト生成する際の引数命名規則

Satoshizzz

総合スコア7

JavaScript

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

0グッド

1クリップ

投稿2020/02/09 10:48

編集2020/02/09 12:08

ブロックチェーン関連のコードを書いているのですが
以下のようなaddTransactionメソッドがあったとします。この場合、引数にはアンダースコアは付けるべきですか?
transactionというオブジェクトのプロパティと引数の名前が一緒なので、アンダースコアを付けた方がわかりやすいかと思いました。
ただ、そのルールだと、validChainにはアンダースコアなしとなり、統一性がないようにみえて気になります。
関数/メソッドの引数の命名規則が調べてもデファクトスタンダートが分からず。
どなたか教えてくれますか?

class BlockChain { ..... addTransaction(_senderAddress,_recipientAddress, _amount) { const transaction = { senderAddress: _senderAddress, recipientAddress: _recipientAddress, amount: _amount } this.transactionPool.push(transaction); return transaction; } ...... validChain(chain) { let _previousHash = this.hash(GENESIS_ADDRESS); chain.every((block) => { if(block.previousHash !== _previousHash) { return false; } if(!this.validProof(block.transactions, _previousHash, block.nonce)) { return false; } _previousHash = this.hash(block); }); return true; } }

※追記:
validChainの書き方間違えてました。質問の本質ではないですが、修正内容載せておきます

validChain(chain) { let _previousHash = this.hash(GENESIS_ADDRESS); return chain.every((block) => { if(block.previousHash !== _previousHash) { return false; } if(!this.validProof(block.transactions, _previousHash, block.nonce)) { return false; } _previousHash = this.hash(block); return true; }); }

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんにちは

ご質問について、回答したいことが以下の(1),(2)の2点あります。

  • (1)は、開発上の個人的な設定に関することで、誰にでも当てはまる内容ではないです。
  • (2)は、ご質問にあるコードに対するコメントになります。

(1) '_'を引数(ふくめ変数)の先頭に付けるときのESLintの設定と意味

これは個々の開発環境によることなので、個人差があると思いますので、あくまで私の場合、ということになりますが、各引数の先頭に '_' を付けることはあります。ESLint をコードチェッカーに使うことが多いのですが、その際にたとえば以下のようなコード

javascript

1function foo(x, y) { 2 return x + 1; 3}

を書くと、ESLintから以下のように、「変数 y が使われていない」旨を警告されます。

'y' is defined but never used. (no-unused-vars)

ですが、後々使いそうなy を引数に残しておいて、当面の間

javascript

1function foo(x, y) { 2 // TODO: y を使った計算結果で x を補正する。 3 return x + 1; 4}

としておきたい場合もあります。そのときに y ではなく _y と書いておくと、デフォルトでは

'_y' is defined but never used. (no-unused-vars)

というメッセージが出ますが、この警告を出さないように設定することができます。(設定の仕方はここargsIgnorePattern として書いてあります。)

ESLintの設定の話になるので、この設定は強制されるものではありませんが、他の方もこれを設定されている例があるなど、ちょっと便利だったりもするので、「今は使っていないけれども、後々使いそうな変数を書いておいて、頭に '_' を付けて、ESLintの警告を回避する」という使い方に(個人的には)慣れてしまっています。

(2) ご質問に挙げられているコードについて

ご質問に挙げられているコードについて

transactionというオブジェクトのプロパティと引数の名前が一緒なので、アンダースコアを付けた方がわかりやすいかと思いました。

とありました。
引数と同じ名前のプロパティで、値としてその引数がそのまま使われていることを、分かりやすくするために、確かにご質問にある

javascript

1addTransaction(_senderAddress,_recipientAddress, _amount) { 2 const transaction = { 3 senderAddress: _senderAddress, 4 recipientAddress: _recipientAddress, 5 amount: _amount 6 }

という書き方もありなのかなと思いますが、

オブジェクトのプロパティと引数の名前が一緒

ということを、一見して分かるようにするには、以下のような書き方もできるかと思います。

javascript

1addTransaction(senderAddress,recipientAddress, amount) { 2 const transaction = { 3 senderAddress, 4 recipientAddress, 5 amount 6 }

オブジェクトtransaction を作る行がメソッド本体の一行目にあって、そこで Shorthand property names の書き方が使われていれば、 transaction のプロパティは、メソッドの引数を名前も値も同じで、そのまま入れるのだなと分かります。

以上、あくまで参考に留めて頂ければと思います。

投稿2020/02/09 11:57

編集2020/02/09 16:31
jun68ykt

総合スコア9058

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

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

Satoshizzz

2020/02/09 12:09

ありがとうございます。`Shorthand property names`の書き方初めて知りました。 この書き方であればアンダースコアはいらなそうですね
jun68ykt

2020/02/09 12:22

コメントありがとうございます。 はい。Shorthand property namesで、これまで、 { x: x, y: y } と書いていたのが、{ x, y } と書けるようになり、表記上の煩わしさがかなり軽減されたのと、x ,y という変数が、 { x, y } の前のどこかにあるはず、と読めるので便利です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問