スクラッチプログラミングに挑戦している皆さん、どうも!スクラッチコーチです。
スクラッチのチュートリアルで
使われているスクラッチコーチのコーディング
規約をまとめておきます!
コーディング規約とは?
コーディング
規約というのはシステム
開発やゲーム
制作の
現場ごとに
定義されている「どうやってコーディングするか」というルールのことです。
例えば変数名の付け方
たとえば
最近のIT
現場における
変数の
名前に
関するコーディング
規約だと、キャメルケースとスネークケースのどちらかが
多い
印象です。
- キャメルケースとは……「scratchGameDevelopment」のように、「scratch」「game」「development」という文字のつなぎ部分を大文字にする書き方。ただし最初の文字は小文字。キャメルというのはラクダのことで、文字の感じがラクダのコブっぽいという由来。かわいい。
- スネークケースとは……「scratch_game_development」のように文字のつなぎにアンダーバーを使う書き方。なんとなくヘビっぽいからという由来。
個人的な
感覚だとJava、Javascript、Python、Rubyなどの
最近メジャーな
言語ではキャメルケースのほうが
多いかな。スネークケースはPHP(とくにWordPress)でよく
使われている
印象。スクラッチだと
日本人は
変数名は
日本語で
付けたほうが
分かりやすいと
思うから、キャメルケースは
使えないし、スネークケースもそこまで
使われてないかな。
ok-scratch
u003cpu003e似たようなので他にもケバブケースというのもある。「scratch-game-development」みたいな感じで食べ物のケバブっぽい……ぽいか?wu003c/pu003eu003cpu003eでもハイフンは変数名に使うとエラーになる言語も多いのでファイル名とか文字列とかで使われる場面が多いかな。u003c/pu003e
スクラッチのコーディング規約
ココからは
実際に
スクラッチコーチで使っているコーディング規約をまとめておきます!
ok-scratch
u003cpu003eただしこれは僕が個人的な経験で作ってきただけで公式のコーディング規約ではないです。というかコーディング規約なんてスクラッチにはないと思う。ここからスクラッチコーチで使ってる規約を紹介するけど、u003cemu003eこのとおりにスクラッチを作らないとダメというものではないu003c/emu003eです。役に立ちそうな部分があったら使ってみてね、という程度の気軽な規約です。u003c/pu003e
変数名
基本的に
変数名は
日本語で
書きます。ただしXやYなど、
英語のほうが分かりやすい部分は英語を
使います。
変数の種類を見分ける書き方
スクラッチには
大きく2
通りの
変数があります。
- すべてのスプライトに共通の変数(グローバル変数)
- このスプライトでのみ使う変数(ローカル変数)
公式のこの2つに
加えて、
さらにもう2つスクラッチコーチでは
独自に
定義しています。
- 1度だけ値をセットしたら2度と変更しないグローバル変数(定数)
- このスプライトのみで使う上に、あるブロック定義内でのみ使われる一時的な変数(プライベート変数)
これらを
見分けるために
以下のように
接頭語を
使っています。
種類 | 接頭語 | 例 |
グローバル変数 (すべてのスプライトで使う変数) | ★ | ★重力 (-1など) ★難易度 ★いまのステージ |
定数 (1度定義したら変更しないグローバル変数) | ■ | ■はい (1) ■いいえ (2) ■あり (1) ■なし (2) ■30FPS (30) ■空白 () |
ローカル変数 (このスプライトのみで使う変数) | なし | スピードY ジャンプ力 |
プライベート変数 (このスプライトのみで使う一時的な変数) | _ | _値 _一時的に保存された速度 |
ok-scratch
\u003cp\u003eプライベート変数についてはそこまで厳密に使ってません。使わないと分かりづらい似たような名前のローカル変数があるときとかは使うかなぁ程度。\u003c/p\u003e
真偽値を格納する変数
変数の
値が0か1(falseかtrue)になる
変数は
接尾語を「~かどうか」にします。
長過ぎたら「~か」でもOK。
例)ジャンプ
中かどうか
例)
空中にいるか
ok-scratch
u003cpu003eとくにローカル変数では真偽値かどうかをパッと見で分かると便利。u003c/pu003e
ブロック定義名
基本的にブロック
定義名は
日本語で
書きます。
ブロック定義名は動詞で
書きます。
例)ジャンプを
行うブロック
定義であれば、「ジャンプ」ではなく「ジャンプする」「
飛ぶ」「
跳ねる」など
再描画するブロック定義かどうかを見分ける書き方
ブロック
定義には
再描画するものとしないものがあります。パッと
見ただけで
分かるように
接頭語を
付けて
判断します(
最近そうし
始めました)
種類 | 接頭語 | 例 |
再描画が必要である | なし | ジャンプする アニメーションする |
再描画が不要である | _ (アンダーバー) | _空中にいるか調べる _スピンできるか調べる _埋もれを修正する |
引数は引数名をラベルでも書く
ブロック
定義には
引数を
渡せますが、この
引数名を敢えてラベルでも書き残しておきます。たとえばコレ↓
「
値」という
引数が
定義されています。そして「エンコードする)
値:」というように「
値:」という
引数名を
敢えてラベルにも
書いてあります。この
状態だと
冗長に
思えますが、
実際にブロック
定義を
使う時に便利です。
見てみましょう↓
↑このように
引数は
空白になってしまいます。そうすると「あれ、ここって
何いれるんだっけ?」といちいちブロック
定義の
引数名を
調べる
必要があります。その
ひと手間が面倒なので、
最初からラベルに
引数名を
書き
残しておきます。
メッセージの書き方
基本的に
日本語で
書く。
最近は
不自然でなければ
語尾は「~します」「~しました」で
整えています。
例)ゲームを
開始します
例)
被弾しました
例)
停止ボタンが
押されました
例)ステージをクリアしました
条件分岐やループなどの囲みは極力ネストさせない
ネストというのは「もし~なら」の
中でさらに「もし~なら」を
使うこととか、「ずっと」ループの
中で「もし~なら」を
使うことです。ネスト
自体は
悪いことじゃないし、むしろ
絶対ネストしないと
無理な
場面って
多い。だけど「もし」の
中で5
回も6
回も「もし」が
使われてたりすると、すごく
見づらくなります。こんな↓
こういうのを「ネストの
階層が
深い」と
表現するのですが、
階層が深すぎるとデバッグが大変になりがちです。
そこで、
可能ならネストは
極力しないように
作れるように
心がけてます。
可能なら!
↑
左と
右のブロック
群はまったく
同じ
処理なんですが、どっちが
好みですか?
好みにもよるのですが、
左はネストをさせないようにしたバージョン。
右はネストしまくってるバージョンです。
処理の
内容自体は
全く
同じですが、
左のほうが
個人的には
好みです。
ok-scratch
\u003cp\u003eちなみに僕はスクラッチに限らずJavascriptとかテキスト言語でもネストしないように書く派です。ネスト派もいるし、現場によってはコーディング規約で縛りがあったりするから、どっちでもOKになっておくのがベター。\u003c/p\u003e
コーディング規約を作っちゃおう
これは
僕なりのコーディング
規約ですが、みんな「オレオレ
規約」
作ってしまってOKだと
思います!
別に
仕事じゃないんだし、
自分なりのスクラッチの作り方ベストプラクティスみたいなのを作るのも楽しみなんじゃないかなぁって
思います。
ok-scratch
\u003cp\u003e他にも思い出したり更新があれば追記していきます~!\u003c/p\u003e