「Crystal」の版間の差分
削除された内容 追加された内容
タグ: 2017年版ソースエディター |
→クラス: 初期化メソッドの説明をシンプルなクラスに移動 タグ: 2017年版ソースエディター |
||
250 行
</syntaxhighlight>
===
==== シンプルなクラス ====
;シンプルなクラス:<syntaxhighlight lang=crystal highlight="2" line>
class Hello
def initialize(@name : String = "World")
273 行
Hello Universe!
</syntaxhighlight>
:;初期化メソッド▼
:: <syntaxhighlight lang=crystal line start=4>▼
end▼
</syntaxhighlight>▼
::Rubyであれば▼
:: <syntaxhighlight lang=ruby line start=4>▼
@name = name
end▼
</syntaxhighlight>▼
::また、(@ 付きの)アトリビュート名を仮引数にすると、そのままアトリビュート(a.k.a. インスタンス変数)に仮引数が代入されます。▼
::これは、C++のコンストラクターのメンバー初期化リストと同じアイディアですが、Crystalではインスタンス変数に @ が前置されるので、仮引数に @ が出現すればインスタンス変数の初期値だと自明で、聡明な選択です。▼
278 ⟶ 292行目:
[[Ruby#ユーザー定義クラス]]の都市間の大圏距離を求めるメソッドを追加した例を、Crystalに移植しました。
;都市間の大圏距離:<syntaxhighlight lang=crystal highlight=”2
class GeoCoord
getter :longitude, :latitude
334 ⟶ 348行目:
::としました。
::将来、<syntaxhighlight lang=ruby inline> attr_accessor </syntaxhighlight> が実装される可能性はありますが、姉妹品の<syntaxhighlight lang=crystal inline> setter </syntaxhighlight> との併用が下位互換性を考えると確実です。
▲:;初期化メソッド
▲:: <syntaxhighlight lang=crystal line start=4>
▲ def initialize(@longitude : Float64, @latitude : Float64)
▲ end
▲</syntaxhighlight>
▲::Rubyであれば
▲:: <syntaxhighlight lang=ruby line start=4>
▲ def initialize(longitude, latitude)
▲ end
▲</syntaxhighlight>
▲:とするところですが、Crystalでは、型アノテーション <code> : Float64</code> が必要です。
▲:また、アトリビュート名を仮引数にすると、そのままアトリビュート(a.k.a. インスタンス変数)に仮引数が代入されます。
▲::これは、C++のコンストラクターのメンバー初期化リストと同じアイディアですが、Crystalではインスタンス変数に @ が前置されるので、仮引数に @ が出現すればインスタンス変数の初期値だと自明で、聡明な選択です。
▲:: to_s は、Ruby ならば
:: <syntaxhighlight lang=ruby line start=7>
def to_s()
|