高等学校情報/情報I/プログラミングの基礎技術
基礎知識
編集- ※ 中学校では、すでに技術科で「繰り返し」「条件分岐」など制御の考えかたや、それらのフローチャートの例を習ってます。しかし中学技術科はメカトロニクスなども意識した内容です。このため、「for文」など「if文」などの語彙は中学では習ってない可能性も高いです。(少なくとも2020年頃は)
- 2021年の近年、小中でプログラミング教育の導入が話題ですが、過去の日本の中高のIT教育の実例によると、どちらかというとHTMLのようなwebプログラミングが主体でした。なので、JavaScriptはまだ習ってない場合があります。
なお、windowsで下記のプログラミングを実行するためには一般に、あらかじめコンパイラなどの実行環境のインストールが必要です。(テキストエディタにそのまま文字を入れても、何も起きません。)
例外的にJavaScriptなら、webブラウザを用いて実行できますが、しかしC言語など他の言語のコードはwebブラウザでは処理が不可能です。
入門レベルの中学高校生が実行するには、たとえば教育用の簡易的なC言語実行アプリ、または教育用のPython実行アプリなどの利用が考えられるでしょう。
必ず、実物のキーボードつきのパソコンが必要です。タッチパネル用のタブレットでは、事実上、プログラミングが不可能です。
なぜ不可能かというと、タブレットのソフトウェアキーボードでは、画面が隠れてしまい、そのせいで開発環境の画面の半分が隠れてしまうので、必要な情報が見れずにプログラミングが出来ないからです[1]。
なお、タブレットに実物のキーボードがついたものを「タブレットPC」と言います。
典型的なプログラミング
編集- ※ 2022年度以降の新カリキュラムで習う可能性が高い内容です。[2]
文字列の表示
編集テキストを扱うプログラミング言語では、多くのプログラミング言語で、
print("Hello, world!")
のような構文で、文字列を表示します。
上の例はPythonで、print
は関数です[3]。
C言語でも関数ですが関数名が異なり puts("Hello, world!")
となります。
また、JavaScriptの場合は window.confirm("Hello, world!")
と関数ではなくメソッドです[4]。
Pythonの場合、print("Hello, world!")
を実行すると、
Hello, world!
と表示されます。
if
編集さて、中学校で「条件分岐」の考えを習いましたが、しかしどのような構文で条件分岐のプログラミングが出来るかは、習っていないでしょう。(カリキュラムによる)
多くのプログラミング言語では、条件分岐にif文を使います。
たとえば、Pythonの場合は if x == 2 : print("abcd")
は、
「もし変数xが2なら、文字列 "abcd" を表示せよ」という意味になります。
他の言語でも一般的に、区切り文字に違いなどがありますが概ね
if 条件 : 処理
の語順でif文が書かれます。
for
編集多くのプログラム言語で、繰り返しには、for文を使います。
たとえばPythonの場合、
for i in range(5): print("a")
なら、 表示結果として
a a a a a
と画面に文字出力されます。
for 変数 in range(回数): 処理
の書式です。
この様にプログラミング言語が異なると、同じ機能を実現するためでも、異なるプログラミングが必要になります。
「コメント」という用語
編集たとえば、Pythonでは、「#」という記号を使うことにより、その記号から文末までにメモを入れる事が出来ます。
# 「ようこそ」 と出力 print("ようこそ")
つまり、上記のコード例の場合、#
記号以降から文末までの『# 「ようこそ」と出力』の部分は実行されません。
この「#」記号のような機能のことを、プログラミング用語で「コメント」と言います。
コメントの機能は、他の多くのプログラミング言語にもあります。記号の文字そのものは違いますが、C言語やJavaScriptにもコメント機能があるので、プログラム中にメモを必要に応じて書くことができます。
関数
編集プログラミングでいう「関数」(function)と、数学用語の二次関数や三角関数などの「関数」(function)とは、意味が違います。(日本語でも英語でも、つづりが同じです。)
プログラミングでいう「関数」とは、コンピュータにさせたい処理手続きをまとめたて名前をつけたものです。
- ※ なお慣習的にプログラミング界隈では、どうしても数学の三角関数などのことに言及したい場合、区別のため、数学の関数のほうは「数学関数」または「算術関数」などと呼んで、区別する場合があります。
そして、C言語やJavaScriptやPythonなど、多くの現代で普及しているプログラミング言語には、プログラミングでいう「関数」の機能があります。
- ※ Pythonのプログラミングについては『Python』を参照、その関数の文法については『Python/関数』の「初歩的な内容」の節を参照してください。
- ※ 関数のコードについては、C言語とPythonとで大きく異なるので、本ページでは説明は省きます。
どの言語でも、理解すべき用語は「関数」のほか、「引数」(ひきすう)と、「戻り値」(「返り値」ともいう)という用語が基本的です。
プログラミング言語によっては、この繰り返し処理の関数のことを「サブルーチン」と読んだりします。
関数にする際の注意点
編集ある関数Aから、別の関数Bを呼び出すこともできます。
ただし、たとえば
関数Aから関数Bを呼び出し、その関数Bから関数Cを呼び出し、関数Cから関数Dを・・・(中略)・・・、関数yから関数Zを呼び出す、
みたいに、あまりにも呼び出しの階層が深すぎると、かえってプログラミングしづらくなることが、経験的に知られています。
- ※ 文科省の教員向け研修教材にも書いてあります。
関数の呼び出しの階層が、あまり深くなり過ぎないようにしましょう。
同様に、プログラミング言語の多くには、実行中のファイルから別のファイルを呼び出してそれを実行する機能もあるのですが、やはりファイルAからファイルBを経由して・・・(中略)・・・ファイルZを実行、みたいなのは、とても困ります。
このように、プログラミング言語には、あるモジュールから別のモジュールを呼び出す機能があります。
- ※ ここでいう「モジュール化」とは、機能別に(コードなどを)別々のグループにまとめる事などで、部品の取り替えや交換や更新などを容易にする、という意味です。製造業などでいう「部品のモジュール化」などと同じ意味です。python用語の「モジュール」とは意味が異なります。
関数化などモジュール化の際の注意点として、モジュールから別のモジュールを呼び出す際の階層構造があまり深くならないように、全体設計をする必要があります。[5]
この理由のひとつは、会社などの仕事でつくるプログラムは一般的に集団作業だから、です。もし階層構造が深くなりすぎると、他のプログラマーがモジュールを探しづらくなったり、あるいは、モジュールの見落としのミスによって、プログラムミスなどの不具合の発生につながったりします。(※ 研修資料には、こういう理由までは書いてないです。)仮に現時点では自分ひとりで作っているプログラムであったとしても、もしかしたら将来には別の人(たとえば後輩など)がそのプログラムを引き継ぐかもしれない、といった将来まで考える必要があるのです。
- ※ 複数の似ている処理内容をなんでもかんでも共通化しすぎると、階層構造が深くなりがちです。階層が深くなりすぎるミスは、プロのITプログラマーでも初心者だと、やりがちですので、特に気をつけてください。
同様の理由で、モジュールの数をあまり増やしすぎたりしないようにする工夫も必要ですし、あるいは一つのモジュールから呼び出すモジュールを増やしすぎないようにする工夫も必要です。[6]
その他の重要概念
編集乱数
編集サイコロの目のように、確率的に発生する現象をコンピュータで実行したい場合、「乱数」という機能を使います。これらの機能には、 random (ランダム)などの用語が使われる場合が多いです。
Pythonの場合なら、本wikiでは『Python/モジュールのインポート』に説明があります。
リスト
編集Pythonでは「リスト」、C言語やJavaScriptでは「配列」と言われる機能があります。
Pythonの場合については『Python/リスト』を参照してください。
プログラミング以外のコンピュータ課題解決
編集コンピュータに計算させたりそれを表示させたい場合、なにも必ずしもC言語やPythonなどのプログラミングの方法を使う必要は無い。
Widows用のオフィスソフトのエクセル(EXCEL)でも、計算などが可能である。(※ エクセルを使う方法は、文部科学省の教員用資料にも紹介されている、教育的にも正当な方法です。)
- ※ エクセルを使う場合、教養として高校〜大学初級レベルの数学知識の他、さらにIT知識として「CSVファイル」というデータ形式を知っていると、何かと都合がいい。[7]
範囲外?: JavaScriptのプログラム
編集(東京書籍や日本文教出版などの一部の教科書で、JavaScript(ジャバ スクリプト)が紹介されている。)
webブラウザ上で、ちょっとしたプログラムを動かしたい時のためのプログラミング言語として、『JavaScript』(ジャバ スクリプト)があります。
なお、名前の似た別のプログラミング言語として、『Java』(ジャバ)がありますが、まったく別の言語です。
さて、本書では、JavaScriptについて、説明します。
まず、次のコードを見てください。JavaScriptは、次のコードのようhtmlに埋めこんで(うめこんで)、使います。
<DOCTYPE html>
<html>
<head>
<title>わたしたちの学校</title>
</head>
<body>
<script>
var hensuu = 132;
document.write(hensuu + 100);
</script>
<h1>わたしたちの学校</h1>
<p>わたしたちの学校を紹介します。わたしたちの学校は・・・</p>
</body>
</html>
まず、JavaScriptを使うためには、<script type="text/javascript">
および</script>
が必要です。
このタグ内には、JavaScriptのプログラムだけを書かないと、いけません。
もしタグ内に、htmlタグ(pタグやh1タグなど)を書くと、エラーになります。
また、プログラムの文を入力するときは、文字入力モードは、直接入力モードにしてください。ほかの文字モードで入力しても、エラーになるでしょう。
さて、JavaScriptで、足し算などの計算のために変数(へんすう)を使用できます。
まず、上記のプログラムでは、「hensuu + 100」という計算をしています。上記のプログラムでは、「hensuu」は、変数です。
このように、変数をつかって計算を行うためには、「これから変数をつかいます」という事をプログラム中で宣言する必要があります。
変数の使用を宣言するには、変数の名前の前に「var」をつけ、スペースを1文字あけます。
言い方を帰ると、varの後ろにある語句が「変数である」と認識されます。
(なお、「var」とは、英語のvariable(バリアブル)が由来であろう。variableの意味は、「変数」。数学用語でも、数学の変数のことを「variable」という。)
「var hensuu;」の意味は、「変数として「hensuu」を用意しなさい」という意味です。 さて、javascriptによるプログラミングでは、1個の変数の作業が終わったことを示すために、さいごに「;」(セミコロン)をつけます。
「hensuu = 132;」の意味は、「変数『hensuu』に、数値132を代入しなさい」という意味です。
JavaScriptにかぎらず一般にプログラミングでは、「=
」記号の意味は、「代入をやりなさい」の意味です。数学の等号とは、意味が違いますので、気をつけてください。
一般にプログラミングでは、=
の右側にある計算の結果を、=
の左側にある変数に代入します。
さて、javascriptによるプログラミングでは、1個の変数の作業が終わったことを示すために、さいごに「;」(セミコロン)をつけます。
上記のプログラムでも、「var hensuu = 132;」となっています。
他の言語では、変数の宣言方法が違っている場合もあるので、まったく暗記の必要は、ありません。
なお、数学でいう「変数」とは少し事情がちがていて、JavaScriptの変数の名前は1文字でなくても、かまいません。(一般に、ほかのプログラミング言語でも、変数名は1文字でなくても、かまわない。 )
そして、JavaScriptの変数は、数でもありますので、四則演算(数学でいう「+」、「ー」、「×」、「÷」)などの計算をできます。(一般に、ほかのプログラミング言語でも、変数をつかって、四則演算の計算をできる。)
たとえば、上記のプログラムでは、「hensuu + 100」という計算をしています。
そして、式の終わりであることを示すために、さいごに「;」(セミコロン)をつけます。上記のプログラムでも、「hensuu + 100;」となっています。
「document.write()」とは、「カッコ内の式を出力しろ」というような意味のプログラム命令です。
そして、そのカッコ内に、「hensuu + 100」と書かれているので、その式のとおりに計算して「232」(=132+100)を表示する仕組みです。
プログラムを実行するには、このJavaScriptの書かれたhtmlファイルごと保存してから、そのまま普通のwebブラウザで、そのhtmlファイルを開くだけです。
実際に上記コードの書かれたhtmlファイルを開いてみると、計算結果の「232」(=132+100)も出ています。
- ^ 中川一史 ほか編著『GIGAスクール構想 取り組み事例集 ガイドブック』、2022年2月15日 初版第1刷発行、P.5
- ^ 教員用教材 【高等学校情報科「情報Ⅰ」教員研修用教材(本編)】第3章 - 20200722-mxt_jogai02-100013300_005.pdf 『コンピュータとプログラミング』 P115あたり
- ^ Python3では、print は組込み関数ですが、Python2 では命令で文字列を括る括弧は不要でした。
- ^ JavaScriptでは、確認ダイアログのポップアップを文字列の表示に変えました。
- ^ [1] p208
- ^ [2] p208
- ^ 教員研修用資料 のP170にもCSVの記述あり。その他、ファイル内検索で何箇所もCSVが出て来る