1.5 画面表示

(1/1)
JavaScript、HTML、CSS
前回作った1から10までの整数の和を求めるプログラムを、ブラウザ画面に見やすく表示するように改良していく。
計算と制御はJavaScriptで書き、表示はHTML、デザインはスタイルシートに分離する。
(2026年8月9日)誤字・言いまわしを校正。「計算式と計算結果を画面に表示」で引用するソースが output1.html になっていた誤りと、「計算結果を画面に表示」の解説が output2.html の内容になっていた誤りを修正。あわせて output1.html・output2.html のタイトル、句点、スタイルシートの位置、比較演算子を修正。

目次

サンプル・プログラム

計算結果を画面に表示

計算結果を画面に表示
"output1.html" は、前回作ったプログラムの結果をHTMLとしてブラウザに表示するプログラムである。左図のように表示する。

output1.html

  42: <!-- 結果を表示する(HTML部) -->
  43: <span id="from"></span>から<span id="to"></span>の和は<span id="sum"></span>です。
  44: 

まずHTMLの部分――<span>タグを使って、開始値(idがfrom)、終了値(idがto)、計算結果(idがsum)の3つを用意する。

output1.html

  22: <script>
  23: //ページのロード時に実行
  24: window.onload = function() {
  25:     //変数宣言
  26:     let a = 1;      //開始値
  27:     let b = 10;     //終了値
  28:     let n = 0;      //合計値
  29: 
  30:     //aからbまでの整数の合計を求める
  31:     for (let i = ai <bi++) {
  32:         n +i;
  33:     }
  34: 
  35:     //結果を表示する
  36:     document.getElementById('from').innerHTML = a;
  37:     document.getElementById('to').innerHTML   = b;
  38:     document.getElementById('sum').innerHTML  = n;
  39: };
  40: </script>

次にJavaScriptの部分――基本的な部分は前回作ったプログラムと同じだが、"window.onload = function() {...}" で始まるところが大きく異なる。
これは、このページ、すなわち "output1.html" をブラウザがロードするとき、ブレース {...} で囲まれたブロックを実行しろという命令である。詳しくは「5.2 プロパティ、メソッド、イベントハンドラ」で説明する。いまは定型文だと考えていただきたい。

"document.getElementById('sum').innerHTML = n" は、HTMLでidがsumであるタグの要素として変数nの内容を代入するという命令である。これは "<span id="sum">[変数nの内容]</span>" と書くのと同じ意味になる。
なお、 $ n = n + i $ を $ n\ +\!\!=\ i $ に縮めている。両者は同じ意味である。これもバグを発見しやすくするために、式を短くする例である。

output1.html

   7: <style>
   8: #from {
   9:     color: blue;
  10: }
  11: #to {
  12:     color: green;
  13: }
  14: #sum {
  15:     color: red;
  16:     font-weight: bold;
  17: }
  18: </style>

おまけとしてスタイルシートも用意した。<span>タグのidで示される場所に色を付ける。
このプログラムは、ブラウザがこのファイルをロードするとき、1から10までの整数の和を計算し、開始値、終了値、計算結果をそれぞれ、<span>タグのidで示される場所に表示する――という働きをする。

計算式と計算結果を画面に表示

計算式と計算結果を画面に表示
"output2.html" は、繰り返し計算する式を含めて表示するものだ。

output2.html

  44: <!-- 結果を表示する(HTML部) -->
  45: <span id="exp"></span>=<span id="sum"></span>
  46: 

まずHTMLの部分――<span>タグを使って、計算式(idがexp)、計算結果(idがsum)の2つを用意する。

output2.html

  19: <script>
  20: //ページのロード時に実行
  21: window.onload = function() {
  22:     //変数宣言
  23:     let a = 1;      //開始値
  24:     let b = 10;     //終了値
  25:     let n = 0;      //合計値
  26:     let s = '';     //計算式
  27: 
  28:     //aからbまでの整数の合計を求める
  29:     for (let i = ai <bi++) {
  30:         n +i;
  31:         s +i.toString();
  32:         //iが終了値でなければ計算式に+を追加する
  33:         if (i !== b) {
  34:             s +'+';
  35:         }
  36:     }
  37: 
  38:     //結果を表示する
  39:     document.getElementById('exp').innerHTML = s;
  40:     document.getElementById('sum').innerHTML = n;
  41: };
  42: </script>

次にJavaScriptの部分――繰り返し計算する式を変数sに代入する。
式は、最初に作ったプログラム "hello.html" が表示した "hello, world" というメッセージと同じで、文字列(テキスト)として扱う。そこで、変数iの値を文字列に変換する必要がある。これを行うのが i.toString() である。追い追い説明するが、ここでは、toString()はピリオドの左にある変数を文字列に変換する命令だと覚えておいてほしい。
文字列に対する s += は足し算ではなく、文字列sの末尾に右辺の文字列を加えていくという作用となる。

"if (i !== b) {...}" は、 $ i\neq b $(プログラムではノットイコールを !== と書く。詳しくは「2.6 比較演算子と論理演算子」で説明する)のとき、ブロック内を実行するという命令(if文)である。コメントに書いたとおり、iが終了値でなければ計算式に+を追加する働きをする。

b = 100 でも b = 1000 でも、瞬時に長~い式とともに計算結果を表示する。forループの面目躍如といったところであろう。

練習問題

コラム:ロジックとデザインの分離

コマンドライン画面:C言語のプログラムで1から50までの和を計算
プログラムへの入出力がコマンドラインから1行ずつ行われていた時代からフルスクリーンになったとき、プログラム作りに要求されたのがロジックとデザインを分離することだった。

ロジックは、上述の例で言えばJavaScriptの部分に当たる。計算や制御を司る部分だ。デザインは、HTMLとスタイルシートである。
ロジックとデザインの分離を求める背景には、もっともらしい理由がいくつかあるが、個人的に言わせていただくと、一定水準以上のロジックとデザインを1人で書ける人間は存在しないということに尽きる。つまり、仕事でWebアプリケーションを作るなら、ロジックを書く人(狭義のプログラマ)とデザインを書く人(Webデザイナ)の、少なくとも2人は必要で、分業制にしないとプログラムの品質を担保できない。

HTMLでは、JavaScriptとスタイルシートを別ファイルに分離することができる。<script src="[JavaScriptファイル名]"><link href="[CSSファイル名]" rel="stylesheet"> である。
ソース管理ツールが無くても、各々が担当するファイルをあらかじめ分離しておき、最後にHTMLでリンクすればいい。

ちなみに、私はロジックはともかく、デザインセンスが皆無である。このシリーズでは、入出力部分は極力、HTMLとスタイルシートに分離していくので、皆さんでデザインを改良していただきたい😓
(この項おわり)
header