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

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

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

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

3回答

1028閲覧

javascriptにおける配列と演算子の関係

sasasa1231

総合スコア11

JavaScript

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2019/07/20 01:57

プログラミングを最近始めたのですがわからない点があったので質問させていただきます。
javascriptの演算子と配列についてなのですが、javascript内で演算子を配列化し動作させようとと考えました。
文字列にした場合はうまくいきました。

'use strict'; const symbol1 =["+", "-", "*", "/"]; for(let i=0;i<4;i++){ console.log(symbol1[i]); // +,-,*,/がコンソールされる }

しかし、演算子をそのまま使おうとした場合、エラーが起きてしまいました。

'use strict'; const symbol2 =[+, -, *, /]; for(let i=0;i<4;i++){ console.log(2 symbol2[i] 3); //2 + 3の結果である5などを表示したい }

javascriptの場合、演算子を配列で定義して使用するというのは不可能なのでしょうか。
それとも、javaやpythonなどの他言語でも同じなのでしょうか。
他言語でも不可能な場合どのような理由があるのでしょうか。

どうか教えていただきたいです。よろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

大抵の言語では不可能です。

プログラムにとっては、文字列( '+', '-', 'if', ...)とキーワード( +, -, if...)は全くの別物として扱われるからです。
プログラムの解釈の過程で、これらを同一視するのは難しいという事情もあります。また、プログラムを書く上でも都合がよい挙動です。

もし文字列が演算子として成立してしまったら、例えば以下のコードの動作が決まりません。

javascript

1var minus = '-' 2console.log(10 + minus + 20)

実際のJavaScript では minus が文字列として解釈されるので、結果は '10-20' になりますが、 minus を演算子に置き換えた 10 + - + 20 は前置演算子のマイナスと解釈されるので、結果は -10 になります( 10 (+ (- (+ 20))) と解釈される )。
もし文字列が演算子として解釈されるようになれば後者の動作になるのでしょうが、そうなってしまっては、私たちは文字列を結合する際に変数の中に格納されている文字が何であるかを常に考慮しなければならなくなります。これは非常に不便です。

なので配列に演算子を格納することはできませんが、関数なら格納することができるので、以下のようなことはできます。

javascript

1var operator = [ 2 (a, b) => a + b, 3 (a, b) => a - b, 4 (a, b) => a * b, 5 (a, b) => a / b 6] 7for(let i=0;i<4;i++){ 8 console.log(operator[i](2, 3)) 9}

投稿2019/07/20 02:28

R.Mizukami

総合スコア1086

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

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

sasasa1231

2019/07/20 02:40

回答ありがとうございます。 書かれているこを読んでみてとても参考になりました。自分が学習していて特に気にしていなかったのですが、文字列が演算子として成立した場合のデメリットなどは考えておりませんでした。 とても参考になりました。ありがとうございます。
guest

0

もう解決してますが、参考までに。
演算子はだめですが、関数なら配列にできます。

javascript

1function tasu(x,y) {return x + y;} 2function hiku(x,y) {return x - y;} 3function kake(x,y) {return x * y;} 4function waru(x,y) {return x / y;} 5 6const symbol1 =[tasu, hiku, kake, waru]; 7 8for(let i=0;i<4;i++){ 9 console.log(symbol1[i](2,3)); 10}

中置記法ができたら、もっとそれっぽくなるんですけどね。(汗

投稿2019/07/20 02:28

takasima20

総合スコア7458

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

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

sasasa1231

2019/07/20 02:44

回答ありがとうございます。 なるほど、関数を使うと簡単に書けることができるのですね。 わかりやすいサンプルプログラムまで書いていただきありがとうございます。 参考にさせていただきます。
guest

0

演算子を配列で定義して使用するというのは不可能なのでしょうか。

不可能です。
文字列として演算子を入れて、ifで分岐するなどしてください。

js

1const symbol1 =["+", "-", "*", "/"]; 2for(let i=0;i<4;i++){ 3 if ( symbol1[ i ] === "+" ) console.log(2 + 3); 4}

js

1// こういう事も出来ます 2const symbol2 =[1+1, 2-2, 3*3, 4/4];

投稿2019/07/20 02:02

kei344

総合スコア69407

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

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

sasasa1231

2019/07/20 02:13

回答だけでなくサンプルプログラムまで書いていただきありがとうございます。 無理ですか…残念です。 自分は10puzzleのプログラムを書こうと思っていたので、サンプルプログラムを参考に書いてみます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問