ゲームどころから小さなアプリすらも作れる気がしない。
なんて思っていませんか?
いきなり大きなものを作ろうとしていませんか?
今回はそういうお話しです。
まずは小さな第一歩を!
プログラミングをやり始めたけど、、、
- 何から作れば良いのか分からない
- 自分が思い描く動きや処理はあるけど、どう書けばいいのか分からない
- いきなり大きなプログラムを作るなんて無理ゲー過ぎる
って思っていませんか?
そういう時はあの人の名言を!!
プログラミングも ↑ コレ が大切!
プログラミングをするからには、
- ゲームを作りたい
- すごいWebアプリ/サービスを作りたい
- 難しいテクニックを使ってプログラミングしたい
みたいな事を考えているかと思います。
しかし、そう簡単にはいきませんよね。
でも、、、、、
どう書いたらいいのかさっぱり分からねーーーじゃん!!!
ってなりますよね。
積み木方式がいいんじゃない?
やっぱりそれなりの処理を作ろうと思うとプログラム量(*1)は増えますね。
ゲームとか作るとなると、とんでもない量になってしまいます。
さすがに、いきなり大きなプログラムを作るのは難しいです。
で、少しずつ少しずつ、積み木を重ねるように少しずつ作って行くことをオススメします。
プログラム量は『ステップ数』で表現します。
簡単に言うと行数ですね。
ステップ数は基本的にはコメントの行数を抜いて計算します。
しかしそんなものは手で数えてられないので、ステップ数を数えてくれるソフトを使いましょう。
また、ステップ数ではなくプログラムファイルのbyte数で表現することがあります。
半角1文字で1byteです。UTF-8の全角文字だと1文字で3byteです。
ってことは、文字数が多ければ多いほどファイルのbyte数が増えます。
『キミ、どれぐらいの量のプログラミング経験あるの?』
『300キロバイト程度のプログラムぐらいラクショーっすよ!』
みたいな感じで会話の中で使います。
積み木方式ってどうやるの?
積み木方式という呼び方が適当かどうかは分かりませんが、
少し書いて動かして → また少し書いて動かして → またまた少し書いて動かして → ・・・・
ということを繰り返していくだけです。
ぜ~~~~~~~~~~~~んぶ書いてから動かすのではなく、一行書いては動かして確認、一行書いては動かして確認という感じで一歩一歩進んでいきましょう。
そうする事で気付いた時には大きなプログラムを書けていますよ。ホント。
でもそんなやり方だと全く前へ進まないと思いますよね?
ギター初心者が耳コピしたとしましょう。
経験者は分かると思いますが、1音拾うのも超大変です。
1小節コピるのに1週間とか2週間とかかかります。
1曲全部コピり終わるのに何ヶ月かかることやら・・・・・
それに比較したらプログラミングなんてラクショーですよ。
一行ずつ書いてもあっという間に大きなプログラムができますよ。
こんな感じでやってみましょう!
今回はRubyを使って、文字列を表示するプログラムを改造していく形でやってみます。
Rubyを知らない方でも雰囲気は感じ取ってもらえると思いますので、是非読んでみてください。
1.まずは超簡単な命令を書きます。
puts "hoge-hoge"
Rubyとしては一番簡単な命令だと思う命令をまずは書きます。
これぐらいは超絶ラクショーですよね。
2.表示する文字を変えたい。
puts "fuga-fuga"
表示する文字を変えるだけなら書き換えればOK!
でもこれだと意味ないよね。
ソースコードをその都度書き換えるなんてできないし。
実行の時に表示する文字を変更したいよね。
もしかしたら関数を使ったらできんじゃね?
def Hoge() puts "fuga-fuga" end Hoge()
いや、これじゃダメだ。
結局同じ文字しか表示できねーじゃん。
ググったら『引数』ってのがあるじゃん。
これ使ってみよう。
def Hoge(args) puts args end Hoge("hoge-hoge") Hoge("fuga-fuga")
おっ!!
それらしいものができた!!!
3.いやいや、プログラム内に表示文字を書いたらアッカン~♪ 書いたらアッカン~♪
上のやり方でもいいけど、プログラムの中に書いた文字しか表示できないよね。
文字をプログラムに入れず、動かす時に変えられないのか?
Rubyの本(たのしいRuby第5版とか)を見たらコマンドラインてのがあるやん。
コマンドラインを使ってみたら出来るんじゃね?
puts ("#{ARGV[0]}")
↑をtest.rbに保存して
↓こうやって動かせば
ruby test.rb hoge-hoge ruby test.rb fuga-fuga
お、表示文字を変えられるじゃん!
4.関数を使うパターンを書いてみよかな
でもせっかく思いついた関数が消えるのはもったいないので、関数を使ってできるパターンで書いてみよう。
コマンドライン引数を関数呼び出しの時に渡せばいいんじゃね?
def Hoge(args) puts args end Hoge("#{ARGV[0]}")
おっ! できた!
5.そのまま表示するのはつまらんので、文字を加工して表示してぇ~なぁ~
実行の時にコマンドラインで入力した文字を表示する事はできたけど、入力した文字をそのまま表示しただけじゃん。
ちょっと加工して表示を変えることできるの?
調べたら『#{args}』みたいに書けばいいらしい。
def Hoge(args) puts "It is #{args}." end Hoge("#{ARGV[0]}")
↑をtest.rbに保存して
↓こうやって動かせば
ruby test.rb hoge-hoge ruby test.rb fuga-fuga
できたっ!
6.コマンドラインに文字入力するのが面倒になってきたぞ・・・
実行時に表示する文字列をコマンドラインで渡せるのは便利でいいんだけど、コマンドラインにわざわざ文字列を打つのがメンドクサイ(笑)
なんでもかんでも文字列を表示することはできなくなるけど、数字さえ入力したら表示できるような仕組みにしてみようかな。
コマンドラインで0を入力したら”Is this a pen?”、1を入力したら”No, this isn’t a bat.”、2を入力したら・・・・・
という感じでできるかな?
表示パターンをたくさん準備しないといけないけど、やってみよう!
で、分岐命令を使いましょう。
def Hoge(args) case args when "0" puts "Is this a pen?" when "1" puts "No, this isn't a bat." when "2" puts "Is she a girl?" when "3" puts "Yes, she is a girl." when "4" puts "Is this a dog?" else puts "No, this is a cat." end end Hoge(ARGV[0])
できたっ!
7.今度は計算プログラム
文字を表示するだけじゃつまらんので、計算プログラムを作ってみる。
ここまでのやり方をちょっとだけ応用してみようかね。
あと、コマンドラインが1個取れるってことは2個目も取れんじゃね? 3個目も取れんじゃね?
def Hoge(keisan_kind, one, two) case keisan_kind when "+" puts "#{one} + #{two} = #{one.to_i + two.to_i}" when "-" puts "#{one} - #{two} = #{one.to_i - two.to_i}" when "*" puts "#{one} * #{two} = #{one.to_i * two.to_i}" when "/" puts "#{one} / #{two} = #{one.to_i / two.to_i}" when "%" puts "#{one} % #{two} = #{one.to_i % two.to_i}" else puts "Oops! unknown kind." end end # コマンドライン1個目:+、-、*、/、% # コマンドライン2個目:計算式の1個目 # コマンドライン3個目:計算式の2個目 Hoge( ARGV[0], ARGV[1], ARGV[2] )
↓こうやって動かせばOKです。
ruby test.rb + 2 3 ruby test.rb - 2 3 ruby test.rb * 2 3 ruby test.rb / 2 3 ruby test.rb % 2 3
どう書けば動くか興味ある方は試してみてください。
8.コマンドラインはさほど実用的じゃないので、プログラムの中で計算する時に使えるようにしよう!
コマンドライン入れるのはいいけど、人間が手入力するのもなぁ・・・・
プログラムの中でこういう計算したい時があるかもしれん。
※単純な四則計算ができれば、今後は複雑な計算に改造できるはず。
で、よくワカランけど、クラスにしてみたらプログラムの中で使い易いんじゃね?
まぁ、プログラムの中で使う使わないは置いといて、まずはクラスってのをやってみるか。
class KeisanClass def keisan(keisan_kind, one, two) case keisan_kind when "+" puts "#{one} + #{two} = #{one.to_i + two.to_i}" when "-" puts "#{one} - #{two} = #{one.to_i - two.to_i}" when "*" puts "#{one} * #{two} = #{one.to_i * two.to_i}" when "/" puts "#{one} / #{two} = #{one.to_i / two.to_i}" when "%" puts "#{one} % #{two} = #{one.to_i % two.to_i}" else puts "Oops! unknown kind." end end end # 引数1個目:+、-、*、/、% # 引数2個目:計算式の1個目 # 引数3個目:計算式の2個目 kesan = KeisanClass.new() kesan.keisan( '+', 5, 6 ) kesan.keisan( '-', 5, 6 ) kesan.keisan( '*', 5, 6 ) kesan.keisan( '/', 10, 3 ) kesan.keisan( '%', 10, 3 )
できたっ!
まとめ
って言う感じで少しずつ少しずつ改造/変更を重ねていくのです。
最初は puts
だけですけど、最後はクラスを使うまでになりましたね。
(細かいところは省略はしていますけども)その途中経過を見ても、大したことやってないですよね?
ホントに少しずつ命令を加えていったり、形を変えたりしているだけです。
最初は知っている命令を駆使して書けばいいです。
でもそのうち飽きてくるというかネタ切れになってくるので、そうなったら新しい命令を覚えて使ってみればいいでしょう。
そうやってほんの少しずつステップアップしていけば、どんどんどんどん難しい処理を書いていけますし、知識も確実に増えていきます。
やっぱりいきなり難しい処理を書くのは難しいです。
でも少しずつ少しずつ足していけばすぐに大きなプログラムを作ることができます。
今回のサンプルは大した内容では無いですけど、あくまでも例ですので雰囲気と言うか、趣旨を掴んでくださいね。