基礎プログラミングa 第2回(10/3)
(Basic Programing)
0 先週の補足
- メールについて
- メールが届いた人には(第一回だけ)返答を送りました。
- 返答が届かない人はおそらく何かのトラブルです(お知らせ下さい)
- まだ出してない人は今からでも出して下さい。
(レポート出さない人はおそらく単位を落とします)
- 件名の使い方について:
- 先頭に(BP) と書いて下さい(そしたら科目名を書かなくても伝わります)
- 学籍番号や名前は件名には書かなくていい(発信者アドレスに書いてある筈なので)
- 件名には内容を要約したような文言を書くのが一般的なマナーです
(メールを読む相手のためでもあり、また、
返答を受け取った自分が困らないためでもある(右図))

- テキスト形式とHTML形式:
- メールはテキスト形式で出すこと
- HTML形式のメールは嫌われることが多い(無視して開かない人も多い)
- HTML形式のメールに怪しい罠が仕組まれている可能性が不可避であるため
- メールソフトの設定を変えておくといい

- エンコーディング
- Webでの文字コード(正確には「エンコーディング」)は
Unicode(UTFとも呼ぶ)だが、
- メールは(日本では)いわゆる「JIS」コード
(ISO-2022-JP エンコーディング)

- PCの基本操作:
とりあえずの入り口として知っておくべきこと
- 右クリックで表示される「コンテキストメニュー」に
このオブジェクト(アイコンなど)に対して何ができるか、
が列挙してある
- アイコン等の上にアイコンを置いてみると(約1秒後に)
ガイドになる情報が表示される
前回の落穂ひろい
Scalaの文法

- 文(式)は縦に積んでもいいし、横に並べてもいい
- 横書きの文章を読むときと同様に、上から順、左から順に
順に実行される(実行順を変える記述がない限り)
- 横に並べるときは ; (セミコロン)で区切る

kojoの使い方
- Kojoをインストールすると2つのアイコンがデスクトップに作られるが、
- この授業では、デスクトップ版を使うことにしておく

- 起動の方法については、ここも参照
- プログラム本体は(殆どのアプリケーションと同様に)
右図のようにCドライブの「Program Files」フォルダの下に置かれる。
- ので、それを直接クリックして開くこともできる、が、
- 面倒ではあるので一般には別の方法がとられる
- (起動のショートカットアイコンはよく使われる)
最低限おぼえておくべきことを2つ紹介しておく:
- Perspective をもとに戻す方法(右図)
- 重要なショートカット
(指に覚えさせ、活用しましょう)
- 実行(右向き三角のボタン押下の代わりに) Ctrl+Enter
- 補完(関数名など入力の途中 数文字打鍵のあと) Ctrl+Space
文字についての補足
- プログラミングにおいては英数字以外の特殊文字も重要な役割を果たす
- 特殊文字の読み方は覚えるようにしましょう

ただし、HTMLなどのマークアップ言語によく使われる囲み記号
<…> は、
一般的にプログラミング言語では囲み記号としては使われない
(不等号として使われることが多い)。
1 kojo と Scala言語について
Scala言語の文法の要点
=> 前回資料 参照
Kojoスクリプトは Scala言語によるプログラムである
- ただしやや単純に書けるよう工夫されている
- Scala の文法の基礎は 前回第6章を参照
- プログラムは 関数呼び出しを組み合わせて作る

+------------------- - - - - -
| (我々が作る)スクリプト
+------------------- - - - - -
| Scalaの関数 | Kojo用関数 ...
+------------------- - - - - -
関数とは

予め用意されている、道具 あるいは 部品のようなもの
(自分で用意することもできるがそれは後述)
- kojoでは、タートルに対する命令・指示の意味で使うことが多い
- オブジェクトやクラスに固有の関数は、
メソッドと呼ばれる場合もある(この部分は 後期の中盤にあらためて解説する)

英語では単語を2つ以上組み合わせて |
1つの命令語を構成することもある |


名前がついている
- 一般に 英文字で始まる英数字
- スペースや特殊文字は間に入らない
- 1つの英単語から成る関数名もあり、また、複数の単語をつないだ関数名もある
(その時は2つめ以降の単語の先頭文字を大文字にするスタイルが
KojoやScalaでよく使われる(右図))

呼び出すときには
関数名だけか 後ろに ()で包んで パラメータ(あるいは 引数=ひきすう)を並べる
(これまでに出てきた中では)
left right clear などは 前者。
// ただし left() right() などのように 空の()をつけてもいい
// さらに 実は left にも 引数を渡すことができる (試してみてね)
forward(10) などは 後者。
- ()内の数字が パラメータ(引数)
- ここでは 10 だが 代わりに どんな数字(整数に限定)でも書ける
- パラメータの数は関数によって違う
- 引数 を ひきすう と読む 日本語では湯桶読みの一種
- 引数 を いんすう と読まないのは 数学用語の「因数」との混同を避けるため
- 各行に 関数呼び出し(や それらを組み合わせて作った 式など)を書くのが一般的
- 1行に複数の式 や 1つの式を複数行にまたがって書く といったこともできる。
- 本レジュメでは 一行に複数の式を書くことがある。
- そのとき、式と式の間は ‘ ; ‘ で区切る。

- 原則として 上から順に実行される(逐次実行)。
制御構造によりそれは変更される 例えば repeat()
2 タートルを使ったいろんな作図(1)
タートルに対する(最初に覚えるべき)命令(関数)=>右図
a) Script Editor に
forward(100)
と入力してみる
100ピクセル分 前進せよという司令
これを関数と呼ぶ
実行ボタンを押して 変化を眺める

b) 新たに一行目から
(もしくは 履歴後退「<=」ボタンで前aのプログラムを呼び出して編集し)
left // もしくは left() と書いてもいい
forward(100)
c) 正方形を書いてみる
forward(10) ; left ; forward(10) ; left ; forward(10) ; left ; forward(10) ; left
// 最後のleftはなくてもいいが 省略した場合 描画後の亀の向きが最初と違っている

d) ループを使って正方形を書く
repeat(4) {
forward(10) ; left
}
// この repeat も関数の一種だが、
// 後ろにプログラム片(を ブレース {} で囲んだもの)
// がつくところがやや特殊
// ()内に与える数字が 繰り返しの回数
// repeatは 行の実行順序を変える「制御構造」の一種でもある

字下げについて:
Scalaは自由文法なので、
- 関数名などの名標がスペースで分断されない
- 括弧や演算子が未完結の場合を除いて、行末で文の区切りと見なされる
という条件のもとで、書き手は自由に改行の入ったプログラムが書ける。
例えば悪例1のような配置のプログラムも
意味のあるプログラムとして動作する。が、読みやすさを考慮すると、
以下のようなルールに沿って書くことが望ましい。
このとき ブロックを囲むブレースの位置関係に注意(解説ページ
参照)
- 背中合わせのように見える位置関係だけど
意味としては 向いあっている

- ブロックの中身の先頭が右に数文字ずらしてあることにも注目
- これを 字下げ または インデンテーション(動詞はインデント)と呼ぶ。
- ずらしてなくてもプログラムは動作するが それだと、
プログラムの構造が見えにくくなるので、この字下げは
プログラミングでは基本的な作法である

** 補足と考察
- left の逆の関数 right もある
- じゃあ forward の逆は?
- クルマ(の変速)的には Reverse だけど、
英語的には back? backward?
- 他に 後退させる方法はある?
// このあたり いろいろ試してみてね
e) 直角以外の曲がり方をしてみる(1)

- left() に数字を1つ渡してみる °単位の角度であることを確認せよ
例えば 72 60 45 40 36 30 20 18 15 12 10 など
勿論 right でもいい
- 閉じた曲線にならなければ repeat の回数を増やしてみる
n角形にするときの 折れ曲り角は 360/n 
- そのとき 一回の前進距離はほどほどに小さくなるよう調節
- 充分に一回の折れ曲り角を小さくすると 円に見えるようになる
f) 直角以外の曲がり方をしてみる(2)
- 90より大きな角度を渡してみる
- 180より大きいとどうか 0より小さいとどうか
- 例えば 108 120 135 140 144 150 160 162 165 168 170 などの数字も入れてみる
これは 180-360/n の式である
- repeat の回数は その n に相当する値にするとちょうど最初の位置に戻るが、
とりあえず 非常に大きな数を入れておいても大丈夫
(一周してまだぐるぐる回っていれば 停止ボタンを押せばいい)
- 120 だと正三角形ができる(右図)が、座りの悪い形に見えるかもしれない。
- repeatよりも前に タートルの向きを右90度または左30度ずらすといい
(かもしれない)
g) repeat を 入れ子にする (例)
clear
repeat(5) {
repeat(8) {
forward(30)
left(45)
}
forward(50)
}
実行する前に イメージの中や紙上で どんな結果になるか予測せよ
3 Kojoを理解する
別ページ に沿って解説します
より詳しい情報はKojo wikiを参照。
g’) 関数リファレンスを参考に The Pen の項の関数を試してみる
penDown() penUp() ペンをおろす、持ち上げる
setPenColor() setFillColor() 色の設定
setPenThickness() 太さ

- なお、亀の歩く速度を調節するための関数 setAnimationDelay もある。
- 正確には、亀が1ステップ進むごとに微小時間のディレイ(待ち時間)を挟むことで速度を制御していて、その
待ち時間を調節する関数。
- この名前は3つの単語の連結で成っていて、先頭のset 以外の2つは先頭を大文字にしてある
(プログラミングでよく使われるルール)。
課題(予定)
ここまでに紹介した「関数」を活用して、自分なりの作画をしてみる。
作ったプログラムをメールに貼り付けて提出して下さい。
貼り付ける方法:
- 対象をファイルかクリップボードに保存(ガイドのページを参照)
- メールソフトの新規メール作成窓の本文の部分で「貼付け」
作った画像も貼りつけてみて下さい。方法は以下のとおり。
- 画像ファイルとして保存(以下のいずれかの方法で)
- Kojoの Drawing Canvas の コンテキストメニュー(右クリック)で「sava as image」
- Windows添付ソフトの、Snipping Tool
(Windowsボタンのあと s n i ぐらいの打鍵で
見つかる筈)で領域を切り取って保存
- 画像ファイルをメールに添付