--- title: バカ話ジェネレーター slug: Learn/JavaScript/First_steps/Silly_story_generator tags: - Arrays - Assessment - CodingScripting - JavaScript - Numbers - Operators - Variables - 'l10n:priority' - strings - 初心者 - 学習 translation_of: Learn/JavaScript/First_steps/Silly_story_generator ---
この評価試験では、このモジュールを通して身に付けた知識を生かして、ランダムなバカ話を生成する楽しいアプリを作ります。楽しんでください!
前提条件: | この評価試験を試す前に、このモジュール内のすべての記事を一通り作業しておくべきです。 |
---|---|
目的: | JavaScript の基礎である、変数、数値、演算子、文字列、配列などの理解をテストする。 |
評価試験を開始するには...
index.html
という名前で保存します。ここには見た目をきれいにするため、CSS も含まれています。注: 上記の手順に代わって、JSBin や Thimble のようなサイトを使って評価試験を実施できます。HTML、CSS、JavaScript をオンラインエディターにペーストできます。使っているオンラインエディターが独立した JavaScript パネルを持たない場合、HTML ページ内の <script>
要素内に書いても問題ありません。
HTML および CSS と少しのテキストと JavaScript 関数がありますね。JavaScript を必要なだけ書いて、下記のような動作をするプログラムを書きましょう。
下記のスクリーンショットは完成したプログラムが出力する例を表しています:
これ以上のアイデアを与えるには完成プログラムの例を見てください (ソースコードは覗かないで!)
以下の項目が達成すべきリストです。
基本的なセットアップ
index.html
ファイルと同じディレクトリーに main.js
を作ります。main.js
への参照を外部 JavaScript として適用します。{{htmlelement("script")}} 要素は </body>
タグの直前に配置します。最初の変数と関数
main.js
の先頭に貼り付けます。これで "Enter custom name" テキストフィールド (customName
) 、"Generate random story" ボタン (randomize
) 、HTML の body の下のほうにある {{htmlelement("p")}} 要素 (story
) への参照を保持することができます。さらに randomValueFromArray()
という、引数として配列を取りその配列からランダムに 1 つの項目を戻り値として返す関数が使えるようになります。main.js
の内部で使用できるように、これらの文字列を変数に保持してください。
storyText
という変数に格納します。insertX
という配列に格納します。insertY
という配列に格納します。insertZ
という配列に格納します。イベントハンドラーと未完成の関数の配置:
main.js
ファイルの最後に貼り付けます。これで、
randomize
変数へのクリックイベントリスナーが追加され、その変数に紐づくボタンが押された場合に result()
関数が実行されるようになります。result()
関数の定義が追加されます。この課題の中で、この関数の残りを実装し、正しく動作するようにします。result()
関数の作成
newStory
という変数を作り、storyText
の値を newStory
変数に格納します。これはボタンが押された場合に、毎回新しい話を作り出すために必要となります。もし storyText
変数自体に変更を加えてしまうと一度しか面白い話が生成できなくなってしまいます。xItem
、yItem
、zItem
という変数を 3 つ作成し、それぞれ対応する配列で呼び出した randomValueFromArray()
の戻り値を設定します (それぞれの配列に含まれる文字列がランダムに選ばれます)。例えば、関数を呼び出して insertX
から一つの文字列を取得するには randomValueFromArray(insertX)
のように書きます。newStory
文字列内の :insertx:
、:inserty:
、:insertz:
という 3 か所のプレースホルダーをそれぞれ xItem
、yItem
、zItem
に格納されている文字列で置き換えます。ここでは適切なメソッドを使用して、newStory
に対して何度メソッドを呼び出しても newStory
自体の値を変えずに置換された文字列が手に入るようにしてください。これでボタンが何度押されても、プレースホルダーの値をランダムなバカ話で置き換えることができます。もう少しヒントを出すと、そのメソッドは見つけた最初の部分文字列だけを置き換えるため、同じ部分文字列を置換するためには 2 回メソッドを呼び出す必要があるでしょう。if
ブロックで、newStory
の文字列内で見つかる 'Bob' という文字列を name
変数の値で置換するため、別の文字列置換のメソッド呼び出し追加します。このブロック内では、「もし ( if ) customName
テキストフィールドに何かが入力されていれば、Bob をその文字列で置き換える」ということを言っています。if
ブロックの中では、uk
のラジオボタンが選択されているかどうかを調べています。もし選択されているのなら、重さと温度の単位をポンド・華氏から、ストーン・摂氏に変換したいと思います。そのために必要なことは...
weight
変数が宣言されている行内の、300 を ポンドからストーンに変換した値で置き換えます。そして ' stone'
(ストーン) を Math.round()
の結果に対して、その後ろに結合します。temperature
変数が宣言されている行内の、94 を華氏から摂氏に変換した値で置き換えます。こちらには ' centigrade'
(摂氏~度) という文字を Math.round()
の結果に対して、後ろに結合します。temperature
変数の内容に、'300 pounds' を weight
変数の内容にそれぞれ置換します。story
変数の textContent
プロパティ(段落を参照している) を、newStory
変数の内容で置き換えます。document.querySelector('html').style.backgroundColor = 'red';
replace()
メソッドを複数回繰り返すか、正規表現を使用するかします。具体的には、 var text = 'I am the biggest lover, I love my love'; text.replace(/love/g,'like');
とするとすべての 'love' のインスタンスを 'like' に置き換えます。なお、 String は変化しないことに注意してください。もし特定の組織の元でこのコースを受けているのなら、先生やメンターに出来たものを見せて、評価をお願いしてみましょう。もし自分だけでやっているのなら、この評価試験のスレッドや、Mozilla IRC の #mdn IRC チャンネルに評価をお願いしてみましょう。まずはやってみましょう。カンニングしても得られるものはないですよ!
{{PreviousMenu("Learn/JavaScript/First_steps/Arrays", "Learn/JavaScript/First_steps")}}