サイズ: 3068
コメント:
|
サイズ: 8308
コメント:
|
削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
行 9: | 行 9: |
== 読みやすいプログラムを書こう == === スペースを有効活用 === 演算子や代入のイコールの前後などにはスペースをあけるようにしましょう。 {{{#!highlight ruby str="Love Live!" str2="Tachibana Arisu" arr=["hoge","fuga","piyo"] }}} {{{#!highlight ruby str = "Love Live!" str2 = "Tachibana Arisu" arr = ["hoge", "fuga", "piyo"] }}} === 名前が8割 === この講習会で書いているような小さなプログラムであれば変数の名前は適当でも別に困りませんが、大きなプログラムを書くようになると<<BR>> 変数がどのようなデータと紐付けられているのか、名前を見るだけでわかるようにしておくとはかどります。 {{{#!highlight ruby a = 1011203 }}} {{{#!highlight ruby student_number = 1011203 #=>学籍番号だということが一発でわかる }}} 単語の区切りをアンダーバーで表す方法をスネークケース、単語の区切りを単語の頭を大文字にすることで表す方法をキャメルケースと言います。 {{{#!highlight ruby student_number = 1011203 studentNumber = 1011203 }}} キャメルケースやスネークケースで長々と単語をつなげるとやはり読みにくくなるので、できるだけ短い文字数で的確に変数の性質を説明できるような名前をつけられるようにしたいものです。 === インデント === 行の頭をある一定の文字数分下げることをインデントと呼びます。 {{{#!highlight ruby if str == str2 puts str #=>インデントされている end }}} インデントのないプログラムは一般に読みにくくなることが多いです。 {{{#!highlight ruby if str == str2 puts str puts str2 f(str) g(str) end }}} インデントは普通4文字分することが多いようです。メジャーなエディタならスペースを律儀に押さなくてもTabキーを押せば最適なインデントをしてくれます。 |
|
行 46: | 行 101: |
=== データと処理を一体として扱うメリット === 文字列の長さのような例だとあまりこのような手法のメリットは感じられないかもしれません。<<BR>> 巨大なプログラムにおいてこの手法は威力を発揮します。 Cのような非オブジェクト指向言語ではデータと処理が別のものとして扱われるため、すべてのデータと処理が一緒くたになってプログラムに記述されることになります。<<BR>> これはプログラムが読みにくくなり、開発しにくくなるという結果を招きやすくなります。 オブジェクト指向を取り入れると、あるデータとそれに紐付けられた処理を一つの塊として切り出すことができるので、プログラムをその塊の組み合わせとして記述しやすくなります。<<BR>> つまり大きなプログラムでもひとつの大きな塊ではなく、もう少し小さな単位の集合として作ることができ、プログラムが書きやすくなるというわけです。 === 文字列はオブジェクト === もう一度先の例に戻ってみてみましょう。 {{{#!highlight ruby a = "Love Live!" a.length }}} この例でaは"Love Live!"という文字列であり、かつlengthという文字列の長さを求める手続きも持っている存在であるということができます。<<BR>> つまりRubyでは文字列は文字列そのもののデータとそれに関連する手続きをもった'''オブジェクト'''です。 文字列オブジェクトは何もlengthメソッドしか持っていないわけではありません。例えばreverseというメソッドがあります。 {{{#!highlight ruby "Love Live!".reverse #=> "!eviL evoL"になる }}} どんなメソッドがあるのかはググれば色々出てくると思います。 === 配列もオブジェクト === Rubyではなにも文字列だけがオブジェクトとして扱われているわけではありません。配列も立派なオブジェクトです。例えば配列オブジェクトにはlengthというメソッドがあります。 {{{#!highlight ruby ["Kyoko", "Toshino"].length #=> 2になる }}} reverseメソッドもあります。 {{{#!highlight ruby ["Kyoko", "Toshino"].reverse #=> ["Toshino", "Kyoko"]になる }}} === Rubyでは全てがオブジェクト === Rubyは文字列や配列にかぎらずすべてのデータあるいはデータ構造がオブジェクトとして扱われます。<<BR>> (一方例えばJavaではオブジェクトととして扱われないデータが存在します) 例えば整数もオブジェクトです。timesメソッドを思い出してみましょう。 {{{#!highlight ruby 5.times do ...... }}} 見て分かる通り、timesメソッドは整数オブジェクトに属するメソッドなわけです。 |
|
行 47: | 行 152: |
==== メソッドの呼び出し方 ==== | |
行 48: | 行 154: |
==== 引数と返り値 ==== ==== オブジェクトの種類 ==== ==== 特定のオブジェクトに属さないメソッド ==== |
目次
なにこれ
- 2013年度新入生向けRuby講習会の第2回向け資料です。
- まず第1回向け資料をお読みください。
読みやすいプログラムを書こう
スペースを有効活用
演算子や代入のイコールの前後などにはスペースをあけるようにしましょう。
名前が8割
この講習会で書いているような小さなプログラムであれば変数の名前は適当でも別に困りませんが、大きなプログラムを書くようになると
変数がどのようなデータと紐付けられているのか、名前を見るだけでわかるようにしておくとはかどります。
1 a = 1011203
1 student_number = 1011203 #=>学籍番号だということが一発でわかる
単語の区切りをアンダーバーで表す方法をスネークケース、単語の区切りを単語の頭を大文字にすることで表す方法をキャメルケースと言います。
キャメルケースやスネークケースで長々と単語をつなげるとやはり読みにくくなるので、できるだけ短い文字数で的確に変数の性質を説明できるような名前をつけられるようにしたいものです。
インデント
行の頭をある一定の文字数分下げることをインデントと呼びます。
インデントのないプログラムは一般に読みにくくなることが多いです。
インデントは普通4文字分することが多いようです。メジャーなエディタならスペースを律儀に押さなくてもTabキーを押せば最適なインデントをしてくれます。
なんでもオブジェクト
オブジェクト指向
今回はRubyの考え方の根幹をなしている「オブジェクト」と呼ばれるものの話が中心となります。
Rubyはオブジェクト指向言語と呼ばれる言語の一種です。字の通り、オブジェクトというものを中心に考えたプログラミングの考え方を取り入れた言語です。
オブジェクト指向は現代のプログラミングの考え方の主流の一つとなっている考え方なので、この際その考え方に触れておくことにしましょう。
オブジェクト指向はRubyだけではなくJavaやC++といった現在主流となっている言語に採用されている考え方です。
オブジェクトって何
オブジェクトというのはデータとそれに関連する処理をひとまとめにした概念といえます。
と言われてもわかりにくいと思うので、実際の例で考えてみることにしましょう。
文字列を考えます。Rubyでは文字列は次のように書きますね。
1 "Love Live!"
プログラムはデータに対して加工や処理を行なっていくことの繰り返しだということを第1回で述べました。
なのでデータに対してよく行われるであろう処理や加工をデータそのものに紐付けておくと何かと便利なのではないかという気がします。
データとそれに関連する手続きをバラバラにもっておくのではなく、一体のものとして扱う。これがオブジェクト指向の考え方の1つの基本です。
たとえば文字列に対して行う処理として文字列の長さを求めるというものが考えられます。オブジェクト指向ではない言語とRubyを比較してオブジェクト指向的な
考え方というのはどういうものなのかをみていきましょう。
オブジェクト指向ではない言語の例としてCを挙げることにします。Cで文字列の長さを求めるにはstrlenというものを使います。
対してRubyの例です。Rubyで文字列の長さを求めるにはlengthメソッドを使います。
データと処理を一体として扱うメリット
文字列の長さのような例だとあまりこのような手法のメリットは感じられないかもしれません。
巨大なプログラムにおいてこの手法は威力を発揮します。
Cのような非オブジェクト指向言語ではデータと処理が別のものとして扱われるため、すべてのデータと処理が一緒くたになってプログラムに記述されることになります。
これはプログラムが読みにくくなり、開発しにくくなるという結果を招きやすくなります。
オブジェクト指向を取り入れると、あるデータとそれに紐付けられた処理を一つの塊として切り出すことができるので、プログラムをその塊の組み合わせとして記述しやすくなります。
つまり大きなプログラムでもひとつの大きな塊ではなく、もう少し小さな単位の集合として作ることができ、プログラムが書きやすくなるというわけです。
文字列はオブジェクト
もう一度先の例に戻ってみてみましょう。
この例でaは"Love Live!"という文字列であり、かつlengthという文字列の長さを求める手続きも持っている存在であるということができます。
つまりRubyでは文字列は文字列そのもののデータとそれに関連する手続きをもったオブジェクトです。
文字列オブジェクトは何もlengthメソッドしか持っていないわけではありません。例えばreverseというメソッドがあります。
1 "Love Live!".reverse #=> "!eviL evoL"になる
どんなメソッドがあるのかはググれば色々出てくると思います。
配列もオブジェクト
Rubyではなにも文字列だけがオブジェクトとして扱われているわけではありません。配列も立派なオブジェクトです。例えば配列オブジェクトにはlengthというメソッドがあります。
1 ["Kyoko", "Toshino"].length #=> 2になる
reverseメソッドもあります。
1 ["Kyoko", "Toshino"].reverse #=> ["Toshino", "Kyoko"]になる
Rubyでは全てがオブジェクト
Rubyは文字列や配列にかぎらずすべてのデータあるいはデータ構造がオブジェクトとして扱われます。
(一方例えばJavaではオブジェクトととして扱われないデータが存在します)
例えば整数もオブジェクトです。timesメソッドを思い出してみましょう。
1 5.times do ......
見て分かる通り、timesメソッドは整数オブジェクトに属するメソッドなわけです。
オブジェクトとメソッド
メソッドの呼び出し方
引数と返り値
オブジェクトの種類
特定のオブジェクトに属さないメソッド
クラス
- これは多分時間がないのでやらない。