inosyanのブログ読者になるinosyanのブログプログラム、家庭菜園、僕が興味を持ったことを書いていきますこの広告は、90日以上更新していないブログに表示しています。2018-10-13【マイクラMakeCode】JavaScriptからプログラムブロックへ切り替える時の罠マイクラMakeCodeプログラムを書いたら、できるだけたくさんの人に見てもらいましょう。みんなで作品を共有すれば、きっとますます楽しくなるでしょう。MakeCode1(メイクコード)は、子供たちがプログラムを学習するためのアプリです。子供たちの多くはプログラムブロック2を使っています。あなたがプログラムブロックを使わずJavaScriptで書いたとしても、プログラムブロックでも見れるようにしておいた方が親切です。JavaScriptとプログラムブロックはボタンを押すだけで簡単に切り替わるんじゃないの?」と思うかもしれません。確かに切り替えは簡単にできるのですが、気をつけたほうが良いことがいくつかあります。そんなに難しいことではないですよ。「;(セミコロン)」が消えるJavaScriptからプログラムブロックに切り替えたあと、再びJavaScriptに切り替えると、元のコードから少し変化することがあります。次のような、単純な足し算をするコードをプログラムブロックに切り替えます。b));})プログラムプロックに切り替えると、このように見えます。JavaScriptと同じ内容ですね。JavaScriptに切り替えると、コードはつぎのようになります。b))})はじめのコードと見比べてみてください。文末の「;(セミコロン)」が消えてますね。セミコロンは、プログラム文がそこで終わることを明示的に示すために書くもので、文末にはこれを書きます。この決まり事は、他の言語だと必須の場合もありますが、JavaScriptは寛容な言語なので、あってもなくても動きます。プログラムブロックとの切り替えをするのであれば、セミコロンは書かない方が良いでしょう。文字列の連結の先頭が変数だった場合、変数の前に「""(空文字)」が足される上の2つの違いをもう一度よく見比べてみてください。プログラムブロックからJavaScriptに切り替える際、文字連結の先頭が変数だった場合、空文字が足されてしまうようです。aその状態から、改行するなど少し編集を加えてからプログラムブロックに切り替えます。(MakeCodeはユーザーが手を加えないとプログラムブロックを更新してくれないので)プログラムブロック上でも「""」が足されてしまいました。この状態からJavaScriptに切り替えても、これ以上は変化しないようです。文字列連結の先頭は変数ではなく文字列を入れるようにすれば、このような変化は起きないようです。自分の書いたコードが勝手に別の形に変化してしまうのは気持ちわるいので、できればはじめから変化しないような書き方をしたいものです。"(ダブルクォート)」に置き換えられるJavaScriptでは、文字列を囲む記号として「"」の他に「'」や「`」が使えます。プログラムからJavaScriptに切り替えると、「"」に置き換えられます。b))になってしまいます。バッククォートで変数を囲むとプログラムブロックに変化しない文字列を囲むだけなら、通常は「"」や「'」を使います。`(バッククォート)」は、変数もいっしょに囲みたい時に使います。b}`と書くことができまます。このほうがプログラムとして見やすいですね。b}`)})プログラムブロックに切り替えるとこのように、バッククォートで囲んだ部分がコードのまま表示されてしまいます。バッククォートで変数を含むとプログラムブロックに変化しないようです。これ以外にも、ブロックに置き換えられないコードは、そのままの形でプログラムブロック上に表示されてしまいます。コードの書き方を知らない人が見たら、意味がわからず混乱してしまうでしょう。別の関数の引数でも、同じ名前のものはグローバル変数3になってしまう例えば、足し算のプログラムの他に、引き算のプログラムを作ったとします。そのまま使い回し、符号だけを変えます。b))})これをプログラムブロックに変えるとこうなります。これをJavaScriptに変えると、このようになります。別のものですし、それぞれのハンドラの中でしか使われない変数なので、グローバル変数ではありません。複数のチャットコマンドで引数の名前が同じだと、この現象がおきるようです。必要のないグローバル変数が作られるのは気持ちわるいので、これを避けるために、変数にそれぞれ違う名前をつけます。subB))})これなら、プログラムブロックからJavaScriptに戻ってきてもグローバル変数が作られることはありません。結局どうすれば良いのかどうやら、プログラムブロックとJavaScriptとは、完璧な切り替えが可能というわけではなさそうです。切り替えてもJavaScriptのコードが崩れないようにするためには、制約があるみたいです。そのために、制約を気にしながらコードを書くのは違うと思います。プログラムは自由に好きなように書いたほうが楽しいです。切り替えをしない前提で書いてしまうというのも一つの方法です。自分しか使わないのであればそれでもいいです。作品を公開するのであれば、プログラムブロックを使う人にも配慮したいものです。解決策は「カスタムブロック4を作る」です。カスタムブロックのコードは別のファイルに書くことができるので、複雑なコードはカスタムブロックに書いて、メインのファイルにはカスタムブロックを呼び出すだけのコードを書くのです。それであれば、メインファイルはシンプルなコードにできるので、プログラムブロックに切り替えてもJavaScriptが崩れることはありません。それにプログラムブロックを見ている人にも配慮できます。カスタムブロックの作り方については、次回ご紹介したいと思います。MakeCode(メイクコード)とは、子供向けに開発されたプログラミング学習用のアプリ。パズルのピースのようなブロックをならべてプログラミングできるビジュアルプログラミングと、JavaScript(TypeScript)でのコーディングを両方サポートしているのが特等。マインクラフトと接続し、ゲーム内の操作をプログラミングできる。↩プログラムブロックとは、ビジュアルプログラムでつかうパズルのピースのような形のブロックのこと。一般的にはブロックと呼ぶが、マインクラフトのゲーム内のブロックと区別するため、ここではそう呼ぶ。↩グローバル変数とは、プログラム中のどこからでも参照できる変数のこと。便利な反面、どの処理からも値を変更できるためバグが起きると原因を特定しづらくなる。↩カスタムブロックとは、ユーザーが定義したプログラムブロックのこと。JavaScript(TypeScript)で書くことができ、他のプログラムブロックと同じようにならべて使うことも、JavaScriptから呼び出すこともできる。プログラミングをしてみましたこんにちは。久々にブロクを更新します。1はてなブログをはじめよう!inosyanさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。