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

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

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

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

Q&A

解決済

3回答

1679閲覧

javascript 真偽値のfalseを何のために使用しているのかが分かりません

yuki504

総合スコア1

JavaScript

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

0グッド

1クリップ

投稿2022/06/02 16:28

編集2022/06/03 00:02

現在電卓をjavascriptを用いて作成しているのですが、あるサイトを参考にしながら作成していたところ、そのサイトの中のコードでvar is_calc = false;を変数に定義して、コードを書いているのですが、なぜこれを使うと=で計算したかどうかになるのかが分かりません。
以下がコードになります。
分かりにくい質問かとは思いますがご回答のほどよろしくお願いします。

HTML

1<div class="wrapper"> 2 <h1 id="header">電卓</h1> 3 <div id="calc"> 4 <div> 5 <input readonly id="result" type="text" value="0"> 6 <button onclick="c_click()">C</button> 7 </div> 8 <div> 9 <button onclick="num_click(this.innerHTML)">7</button> 10 <button onclick="num_click(this.innerHTML)">8</button> 11 <button onclick="num_click(this.innerHTML)">9</button> 12 <button onclick="ope_click(this.innerHTML)">÷</button> 13 </div> 14 <div> 15 <button onclick="num_click(this.innerHTML)">4</button> 16 <button onclick="num_click(this.innerHTML)">5</button> 17 <button onclick="num_click(this.innerHTML)">6</button> 18 <button onclick="ope_click(this.innerHTML)">×</button> 19 </div> 20 <div> 21 <button onclick="num_click(this.innerHTML)">1</button> 22 <button onclick="num_click(this.innerHTML)">2</button> 23 <button onclick="num_click(this.innerHTML)">3</button> 24 <button onclick="ope_click(this.innerHTML)">-</button> 25 </div> 26 <div> 27 <button onclick="num_click(this.innerHTML)">0</button> 28 <button onclick="num_click(this.innerHTML)">.</button> 29 <button onclick="equal_click()">=</button> 30 <button onclick="ope_click(this.innerHTML)">+</button> 31 </div> 32 </div> 33</div>

CSS

1@charset "utf-8"; 2/*全体*/ 3.wrapper{ 4 max-width: 350px; 5 margin: 0 auto; 6 color: #666; 7} 8#header,#calc{ 9 box-sizing: border-box; 10 text-align: center; 11} 12/*ヘッダー*/ 13#header { 14 font-size: 24px; 15 padding: 1rem; 16} 17/*テキスト*/ 18input{ 19 box-sizing: border-box; 20 width: 75%; 21 height: 3.5rem; 22 font-size: 1.6rem; 23 text-align: right; 24 padding: 0 0.75rem; 25} 26/*ボタン関係*/ 27button{ 28 font-size: 18px; 29 width: 25%; 30 height: 3.5rem; 31 color: #333; 32 vertical-align: middle; 33 border-color: #fff; 34} 35button:hover{ 36 background-color: #ddd; 37}

javascript

1var result = ""; 2// =で計算したかどうか 3var is_calc = false; 4 5// 初期表示 6window.onload = function () { 7 result = document.getElementById('result'); 8}; 9 10// Cキー押下 11function c_click(){ 12 result.value = "0"; 13 is_calc = false; 14} 15 16// 数字キー押下 17function num_click(val){ 18 if(is_calc) result.value = "0"; 19 is_calc = false; 20 21 if(result.value =="0" && val == "0"){ 22 result.value = "0"; 23 }else if(result.value == "0" && val == "."){ 24 result.value = "0."; 25 }else if(result.value == "0"){ 26 result.value = val; 27 }else{ 28 result.value += val; 29 } 30} 31 32// 演算子キー押下 33function ope_click(val){ 34 if(is_calc) is_calc = false; 35 36 if(is_ope_last()){ 37 result.value = result.value.slice(0, -1) + val; 38 } else { 39 result.value += val; 40 } 41} 42 43// =キークリック 44function equal_click(){ 45 if(is_ope_last()) result.value = result.value.slice(0, -1); 46 47 var temp = new Function("return " + result.value.replaceAll("×", "*").replaceAll("÷", "/"))(); 48 if(temp == Infinity || Number.isNaN(temp)){ 49 result.value = "Error"; 50 }else{ 51 result.value = temp; 52 is_calc = true; 53 } 54} 55 56// 入力されている値が演算子かどうか 57function is_ope_last(){ 58 return ["+","-","×","÷"].includes(result.value.toString().slice(-1)); 59} 60

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

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

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

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

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

y_waiwai

2022/06/02 22:07

このままではコードが読みづらいので、質問を編集し、</>(コードの挿入)ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
guest

回答3

0

ベストアンサー

まず、考え方が根本から違います。
プログラミングっていうのは「こう書けばこう動く」ではありません。ロジックを書くのです。

コードを読んでみてください。
コードを読むコツは「一行レベルで、その行が何をしているかを考えながら読む」です。

JavaScript

1// ope_click(val)の定義 2 3 if(is_calc) is_calc = false; 4 5 if(is_ope_last()){ 6 result.value = result.value.slice(0, -1) + val; 7 } else { 8 result.value += val; 9 }

を読んでみましょう。
if(is_calc) is_calc = false;は、{}が省略されているのでわかりやすくするために

if(is_calc){ is_calc = false; }

としておきます。

そうすると、

JavaScript

1 // is_calcがtrueなら 2 if(is_calc){ 3 // is_calcをfalseにする 4 is_calc = false; 5 } 6 7 // もし is_ope_last関数の戻り値がfalse系なら 8 if(is_ope_last()){ 9 // result.valueの値をresult.value. … 10 result.value = result.value.slice(0, -1) + val; 11 } else { // それ以外なら 12 result.value += val; 13 }

という感じになるはずです。
後半部分は適当になってしまいましたが今回は関係ないので。

で、処理全体の内容や 変数 is_calc の遷移(データの移り変わり)を考えてみてください。

このope_click関数が呼び出された時には何をしますか?この関数の役割は?

最初、初期表示のコードでis_calcの値はtrueになっているはずです。
で、function ope_click(val)がよばれると、if(is_calc)でチェックされます。
is_calc の値はtrueなので条件を満たすため、処理部であるis_calc = false;が行われる。

そうすると、is_calcの値はfalseになるはずです。この処理の流れやデータの遷移をプロダクト全体で追うのです。

投稿2022/06/04 02:31

編集2022/06/04 02:34
BeatStar

総合スコア4958

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

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

yuki504

2022/06/04 05:45

回答ありがとうございます。 理解できました。 勉強不足なのでもっと理解を深めていきたいと思います。
guest

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

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

yuki504

2022/06/03 08:24

回答ありがとうございます。 フラグということは分かったんですが、 if(is_calc) is_calc = false; if(is_ope_last()){ result.value = result.value.slice(0, -1) + val; } else { result.value += val; } の場合だと is_calc = false;なら片方のif(is_calc) はtrueになるという認識で合ってますでしょうか?
Lhankor_Mhy

2022/06/04 02:40

試してみればわかると思いますが、違うんじゃないですかね……? if(is_calc) is_calc = false;の結果は、 is_calc = false なら、is_calc は false だと思います。 is_calc = true でも、is_calc は false だと思いますけど。
guest

0

コードでvar is_calc = false;を変数に定義して、コードを書いているのですが、なぜこれを使うと=で計算したかどうかになるのかが分かりません。

「なぜこれを使うと」というという発想がおかしいです。

直近の処理が「=で計算したかどうか」によって、is_calcをセットしているだけです。
で、if(is_calc)で、どちらだったかを判断して処理を変えています。
わかりにくければ、変数名をlast_key_was_equalにリネームしてはどうでしょうか?

投稿2022/06/02 16:52

otn

総合スコア84557

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

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

yuki504

2022/06/03 08:27

回答ありがとうございます。 片方のis_calc = falseなら片方のif(is_calc)はtrueになるという認識で正しいでしょうか?
otn

2022/06/03 14:41 編集

> 片方のis_calc = falseなら片方のif(is_calc)はtrueになるという認識で正しいでしょうか? 意味がわかりません。 is_calc = falseなら、is_calc は false ですが??「片方の」とは??
yuki504

2022/06/03 23:42

if(is_calc)のカッコの中のis_calcです。 この中はtrueという認識ですか? この中がfalseなら=が押されてないときにresult.valueを初期化するというような意味合いになる気がするのですが。それだと辻褄が合わないので。 勉強不足かもしれないんですがよろしくお願いします。
otn

2022/06/04 01:44 編集

is_calc = false を実行してから、is_calcに別の値を代入する前に、is_calcの値を参照したらis_calcはfalseに決まってるじゃないですか。変数の値は何もしないと勝手に変わったりしません。さすがにそのレベルが理解できてないと思えないので、文章の意味が不明です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問