基礎プログラミングa 第3回(10/10)
(Basic Programing)
0 前回のおさらい

** 補足1 文字セットについて

** 補足2 数式について
式の「評価」
- 式を「評価」させると、その値と「型」(後述)が表示される
- kojoでは、スクリプトエディタ上で、式(に相当する部分)を
選択(ドラッグするなどして反転表示させる)した上で、
Ctrl+Enterを押すことで、式を評価させることができる。

「数学」と「関数」(用語のイメージ)
- (高校までの)数学は「数」を扱う学問としてのイメージだった
- 実は「数学」は 「mathematics」の略語だが、
「mathematics」 には「数」(number)の意味は含まれない。
- 数を含むさまざまな概念について考える学問である。
- たとえばこういうサイトが参考になるだろう。

- 「関数」についても、高校等で習ったイメージは右図のようなものだろう。
- 「function」の訳語として「関数」を使うようになる段階でも、
かなり無理なことが行われたため、
「関数」をイメージするときも、他の訳語を含めて、
視野を広めに持つ必要がある。

- 関数やrepeat文などの構造を読み取りやすくするために
字下げ(インデンテーション)は重要
(前回も述べた)
- 正しく字下げが行われたプログラムにするため、kojoでは
スクリプトエディタに、format機能がある。
* コンテキストメニュー(右クリック)にある。

- なお、formatという用語は、プログラムの整形(ここでの意味)意外に、
ディスク等の初期化というような意味で使われることもある。
正多角形
(前回資料も参照)
変化のある図形を作る
repeat(5) のブロックの中にrepeat(4) を書く。それだけだと、
下図左のようにrepeat(20) を1つ書くのと同じ意味になる。

図右のように、内側のrepeat()の前か後ろ(外側のrepeatブロックの中)で
変化を起こす文(forward() やleft() )を置くと、
少し変わった図になるだろう。
一筆書きからの脱却
前回も言及したが、
forward などの、移動を行う(とともにキャンバスに線を描画する)命令を、
penUp と penDown の各命令の間に挟むと、
その移動は、線を描かずに行われる。
これを利用して、繋がっていない複数の図形を描くことができる。
1 関数を作る(関数を定義する 1)
関数と変数
以下のように整理してみた(一つの考え方として)
h) 引数のない関数
def circ {
// ここに やりたいことを書く 複数行に渡っていい
}

注:CやJava言語では (引数のない場合でも)後ろの括弧が必要だが、
Ruby Scala 等では括弧は省略できる。
例題1

- 円を書く関数を作り、{円を書く 50進む} を4回繰り返す
- 50進む を PenUp ~ PenDown で挟んでもいい
(右図)
例題2
- 以下の動きを72回繰り返す
- 正方形を書く(boxという関数にする) 、
- そして、少し回転(例えば 5°)
例題3
- 以下の動きを適切な回数繰り返す
- 何か多角形を書く(polygonという関数にする)、
- そして、少し前進して、少し回転
i) 引数のある関数

def circ(len: Int) {
// やはりここに中身 (関数本体とも呼ぶ)
}

- 括弧内は仮引数と呼ばれる
- : の左側が仮引数の名前で 関数本体でそれを変数のように使うことができる
- 仮引数は 式の中や その関数の中で呼び出す関数の引数 に使う
- : の右側は仮引数の 型名 ここでは 整数であることを示している
- ここでは len を (円を近似する)多角形の、一辺の長さとして使う
つまり forward(len) のように使う
- 引数が1つよりも多い場合は、カッコ内に 引数名 : 型 の対を、必要数だけ、
カンマ ( , ) で区切って並べる。
- 形名(クラス名)は、前述の主要なクラス名以外にも数多くあるが、
分類すれば、以下のいずれかである。
- 最初からあるもの(言語仕様として、またはライブラリとして)
(その主なものを右図に示した)
- 自分で作ったもの

- 型名は一般に先頭を大文字にする慣習がある。
- 一方、関数名や変数名は先頭は小文字
- このルールに従わなくてもプログラムは動作するが、
読む人を混乱するため、守ることにしておくこと。
例題4
円を数個 書く (これは ただ重なって1つになるだけ)
例題5
半径を変えて円を数個書く
例題6
半径を変え、さらに円と円の間で (10ステップ程度の)forwardを挟む
例題7

例題5から、円を描く関数を変更し、一周よりも少し多い回数の繰り返しにする
課題(予定)
- 各自で例題4~7は作って動かしてみて下さい(宿題)。それも含めて、
- 今日作ったプログラムで一番の力作(の ソースと結果画像(の両方))を
メールに添付して提出すること(本日の課題)
- そのプログラムの解説と 感想も少し書いて下さい。
補足 関数はどこにある

- Kojo というソフトウェアは、
- Scala言語で書かれてていて
- そのソースコードは公開されている(オープンソース)

- 例えば「kojo scala def forward」で検索すると
関数 forward が定義されているソースコードを見ることもできる。
- これまで、既存のものとして扱ってきた forward left
などの関数も、
今日紹介したのと概ね同じ方法で定義されていることが
そのソースコードから読み取ることができるだろう。
今日のショートカット
- PC画面上でkojoとブラウザの間を行ったり来たり(が素早く)できるよう、
「アプリケーション切換」のキーボードショートカットをマスタしよう
(Alt + Tab)

- ブラウザで「戻る」ボタンの代わりは、
Alt + ← (左矢印)
2 繰り返しの方法(repeat以外の)
=>別ページ(=>次回)

3 データ操作技術
- 前回、ソースコード(スクリプトの内容)を
コピペする方法は解説した。
- 他に、kojo の機能(ファイルメニュー/Save または Save As)で
ファイルとして保存することもできる。
- ただし、このとき自動的に .kojo という拡張子が付けられる。
- 今回は、描画結果を画像データとして保存する方法を解説する。
- なお、(ソースコードなどの)文字データは、(クリップボード経由で)
メールの本文に直接貼付けることができるが、
画像の場合はファイルとして保存した上で、添付ファイルとして送る必要がある。

kojoの描画結果をファイルにする方法
- Windowsの機能。
- Windows添付のソフト SnippingTool.exe
- 他にも「greenshot」などオンラインソフト多数あり
- kojo の機能で保存。
アプリケーション起動のショートカット
- アプリケーションの名前、またはその本体のファイル名を覚えておくと、
[windows] ボタンのあとにその名前(の最初の数文字)を打鍵すれば、
PC内検索で見つかり、手早く起動できる(ことが多い)

実施例
いくつかの数式を入力して、評価させてみる
1+2+3 //> res44: Int = 6
2*3*4*5 //> res45: Int = 120
1000000000/3 //> res46: Int = 333333333
8/3 //> res47: Int = 2
8.0 / 3 //> res48: Double = 2.6666666666666665
Math.sin(1)+1 //> res49: Double = 1.8414709848078965