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