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

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

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

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

意見交換

9回答

557閲覧

JavaScript のモジュールファイルで、関数名に接頭辞 `_` をつけるかどうか

munekun

総合スコア108

JavaScript

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

1グッド

2クリップ

投稿2025/03/27 02:30

聞きたいこと

JavaScript で接頭辞に _ をつけて区別するという手法があると聞きました。

クラスではない関数群のファイル a.js について、他の b.js などから import しない関数 (a.js 内のプライベート関数) を区別するのだそうです。

みなさんはこれを実践していらっしゃいますか?

JavaScript

1const aFunction1 = () => { 2 _aFunction2(); 3 console.log('aFunction1'); 4}; 5 6const _aFunction2= () => { // 👈 プライベート関数を接頭辞で区別 7 console.log('_aFunction2'); 8}; 9 10export { 11 aFunction1 12}

背景

ChatGPTに聞いたらこういうコードを書いてくれて、便利だと思ったのですが、実際の現場でどうなのかと気になり質問させて頂きました。

ご意見よろしくお願い致します。

tt-lv100👍を押しています

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

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

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

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

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

回答9

#1

juner

総合スコア752

投稿2025/03/27 03:09

編集2025/03/27 03:11

もしかして、 プライベートフィールドの意のやつでしょうか……?(多分その使い方だと undocumented property の意っぽいですが。

その使い方するなら最近だと _ ではなく # を使った プライベートプロパティという手があります。(ただし、 class の中でのみ有効

プライベートプロパティ - JavaScript | MDN

なお、関数のprefix に _ は使いませんね。私のところでは。

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

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

#2

yambejp

総合スコア117548

投稿2025/03/27 03:12

ちょっと何が目的かよくわかりませんが、privateで参照できない関数をつくりたいなら
クラスで取り込んで、プライベート設定(#)しておけばよいのでは?

//test.js

javascript

1export default class TestClass{ 2 aFunction1 = () => { 3 this.#aFunction2(); 4 console.log('aFunction1'); 5 }; 6 #aFunction2= () => { 7 console.log('#aFunction2'); 8 }; 9}

読み込むhtml

html

1<script type="module" src="test.js"></script> 2<script type="module"> 3import testClass from "./test.js"; 4const newClass=new testClass; 5newClass.aFunction1(); 6</script>

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

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

#3

yambejp

総合スコア117548

投稿2025/03/27 03:55

#1

一時期jsでもカプセル化ブームでゲッタ・セッタの設定をするためにプロパティ名の接頭辞に"_"をつけるのが流行ってた時期ありました。
ただ質問者さんの命題ではexportするのがaFunction1だけなのですから、接頭辞をつける意味はまったくないですね。

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

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

#4

munekun

総合スコア108

投稿2025/03/27 06:08

#1

ありがとうございます。# はまさに探していた記述でした。
どうして ChatGPT は _ なんて提示してくれたのか (;´・ω・)

#2

ありがとうございます。お二方とも # がおすすめですね。
さっそく取り入れさせて頂きます。

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

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

#5

miyabi-sun

総合スコア21380

投稿2025/03/27 06:20

編集2025/03/27 06:25

接頭語として_を指定する関数

懐かしい!あったあった!って感じですね

今はクラスのプライベートメソッド指定すりゃええやんって話ですけど
JavaScriptには元々クラスなんてないし、ECMAScript2015(以下ES)で実装されたクラスってプロトタイプをあたかもクラスのように振る舞う偽物をごねごねして充てがっただけでは?みたいな話になりますね。

この辺を真面目に議論すると闇が深くなるのでさておき
JavaScriptのプロトタイプには非公開のプロパティみたいな機能は無かったので、
プライベートメソッドはこういう風にする文化が結構浸透していたイメージがあります。

今はESのバージョンも更に進んでクラスっぽくなってきたなーって感じがするので
新機能を使えば良いと思います。


プライベートな変数や関数

JavaScriptには元々importなる機能は無かったですし、
プライベートな変数の接頭語を_にする文化は無かったはずです。

あるのはjQueryみたいな古のグローバル変数に設定するやり方とか
Node.js以降に出てきたrequireに与えるとか
ES2015のES Modulesの考え方もそうですが

明示した変数や関数しか選んでお外に出せないはずなので、
変数名が衝突するからとか、使われると嫌だからという形で使われる事は無かったはずです。

この辺はChatGPTが時代背景を勘違いして、PHPみたいな他言語と混ぜて解釈している可能性がありますね。

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

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

#6

munekun

総合スコア108

投稿2025/03/27 06:27

#5

ありがとうございます。おお、そうだったのですね。
長く続けていると妙なコードを見ても理由がすぐに分かるものですね。
どうやら ChatGPT くんもあさってな回答をくれたわけではなかったようで安心いたしました。

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

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

#7

yambejp

総合スコア117548

投稿2025/03/27 06:58

#4

接頭辞に「_」をつけるのは標準に近いくらい流行ってたんですよ
昔やってたjsのカプセル化はこんな感じ

javascript

1const hoge={setA:function(val){this._a=val}}; 2Object.defineProperty(hoge,"a",{ 3 get(){return this._a}, 4}); 5console.log(hoge.a); // undefined 6hoge.a=100; 7console.log(hoge.a); // undefined 8hoge.setA(200); 9console.log(hoge.a); // 200

プロパティを別名をつけておいてゲッタで参照する。(逆に言えば接頭辞「_」でなくてもなんでもよかった)
上記の場合セッタの設定がないのでプロパティに投入しても値は変わらず、専用のセッタ関数を用意している

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

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

#8

tt-tt

総合スコア128

投稿2025/03/29 05:52

#3
うわ!懐かしい!!!
この流行りに乗って自分やってたの思い出しました!笑
質問者さんへの回答でなく申し訳ないですが、ハッとしたので回答しちゃいましたmm
(つぶやき:スレッド機能とかあれば、質問の回答と離れた意見も伝えやすいのになとかおもったり思わなかったり)

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

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

#9

munekun

総合スコア108

投稿2025/04/01 03:58

#7

なるほど、そのように setA() のみを介してセットできるようにするという流行りがあったのですね。
ありがとうございます。おかげ様でいつか出会ったときに迷わずに済みそうです。

#8

いえどうぞどうぞ、コメントありがとうございます。
やっぱりみなさんご経験あるのですね。

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

この意見交換はまだ受付中です。

会員登録して回答してみよう

アカウントをお持ちの方は

関連した質問