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

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

ただいまの
回答率

90.04%

Javascriptで代入時のクオーテーションマークとセミコロンの記法がわからない

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 348

muxon

score 4

javascriptの記法についての質問です.

google blocklyを使って,ビジュアルプログラミング環境を開発しています.
カスタムブロックの生成において,以下のjavascriptの記法が何を意味するのかわかりません.

下のtest.jsコードの4行目

var code = '...;\n'

はcodeという変数を宣言して,
文字列を代入していることは分かるのですが,途中にセミコロンが入っていることがの意味がわかりません.

以下はコードです
test.js

Blockly.JavaScript['¥test'] = function(block) {
  var value_test = Blockly.JavaScript.valueToCode(block, 'test', Blockly.JavaScript.ORDER_ATOMIC);
  // TODO: Assemble JavaScript into code variable.
  var code = '...;\n';
  return code;
};


このことについて,インターネットで調べてみたところ,以下のサイトを見つけました.
Blockly1.0:カスタムブロックの作り方 - catch.jp-wiki 変換コードを追加する
こちらのサイトは,ランダムな値を出力するブロックを作成しており,var code部分には以下のように記述していました.

var code = 'Math.floor( Math.random() * (' + value_max + ' - ' + value_min + ' + 1 )) + ' +  value_min;


value_maxやvalue_minは引数であり,Math.floor関数とMath.random関数を使用していることは分かるのですが,やはりそれらをクオーテーションマークで囲っている理由がわかりません.

code変数にどのようなことを代入しているのでしょうか?
クオーテーションマークの使用の理由は何でしょうか?

よろしくお願いいたします.

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • mather

    2018/10/19 19:23

    この `...` はあなたが伏せた文字なのではなく、このままの文字なのでしょうか?

    キャンセル

  • muxon

    2018/10/19 23:02

    このままの文字です.カスタムブロックを作成した際に,改造前に入っている文字です.

    キャンセル

回答 2

+2

シングルクオーテーションで囲んでいる理由は簡単です。そういう文字列を作りたいからです。
ここでは Math.floor などの関数を実行したいのではなく、ただの文字列を作りたいのです。
その中身がJavaScriptとしても解釈できるものになると思うのですが、ここでは実行は全くしていません。

var code = 'Math.floor( Math.random() * (' + value_max + ' - ' + value_min + ' + 1 )) + ' +  value_min;

仮に、value_max と value_min に値を入れて考えてみるとこうなります。

var code = 'Math.floor( Math.random() * (' + 100 + ' - ' + 3 + ' + 1 )) + ' +  3;

これを実行してみればこうなります。

"Math.floor( Math.random() * (100 - 3 + 1 )) + 3"

ただの文字列ですね。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

google blocklyに関してちょっと気になったのでちょっとだけドキュメント見ただけなので間違ってるかもですが、

https://developers.google.com/blockly/guides/create-custom-blocks/caching-arguments

にある通り

var listVar = Blockly.JavaScript.variableDB_.getDistinctName(
    'temp_list', Blockly.Variables.NAME_TYPE);
var code = 'var ' + listVar + ' = ' + arg0 + ';\n';
code += 'alert(' + listVar + '[' + listVar + '.length - 1]);\n';


var temp_list = foo;
alert(temp_list[temp_list.length - 1]);


こういう文字列をcodeに入れるようにしてるはずです。
これはJavaScriptプログラムなので、Blockly実行時に

var temp_list = foo;
alert(temp_list[temp_list.length - 1]);


を実行するものだと思います。
(JavaScriptでJavaScriptプログラムを書いてる感じです)

文章で書きにくいですが
・javascriptでtest.jsファイルを作成して、そのファイルに動かしたいJavaScriptを記載する
・test.jsを実行する
こういうことをしてます。

※なのでセミコロンは不要なんじゃないかとかあるんですが・・・・闘いになりそうなのでここでは気にしないことにします。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/22 19:20

    変数codeに文字列として,Math.floorなどのコードを代入し,別の場所でその文字列にかかれている内容を実行するという感じでしょうか?

    キャンセル

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

  • ただいまの回答率 90.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる