ch00_principle_review

command module
v0.0.0-...-a77510c Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 5, 2023 License: GPL-3.0 Imports: 2 Imported by: 0

README

A Tour of Go の復習問題

Q1. Goの基礎make, new操作

図にで示されている Point Circle Rect を struct を使って定義してください。 また、以下のデータを new して生成し、 fmt.Printf("%#v\n", ...) を使って出力してください。

  1. Px: 100, Py: 50 を持つPoint のデータのポインタ p1
  2. Point: p1, radius: 30 を持つCircle のデータのポインタ c1
  3. Point: p1, width: 20, length: 10 を持つRectのデータのポインタ r1

Q2. フローと関数値渡しと参照渡し を参考に以下の関数を定義してください

  1. func NewCircle(p *Point, r int) *Circle 引数で渡された p を Point, r を radius として持つ 新たな Circle のポインタを返す関数
  2. func ExpandCircle(c *Circle, dr int) 引数 c で渡された *Circle の参照する Circle の radius に dr を足す関数
  3. 上の2つの関数で引数や戻り値にポインタを使わなかったらどうなるのか説明してください。
  4. これらの関数のテストあるいは動作を確認できるようなmain関数を作成してください。
  5. defer をどのような場合に使うのか例を示して説明してください(ネットで調べても可)。

Q3. オブジェクト指向

  1. この章をすべて読んでください
  2. Q2で作成した ExpandCircle*Circle のメソッド Expand として作り直してください
  3. *Rect に面積を求めるメソッド Area() int を追加してください
  4. BoxList を参考に 最も大きな面積の Rect (のポインタ) を返すメソッド Biggest を持つ RectList[]*Rect から作成してください。 (ヒント Biggest のレシーバーは RectListのポインタを使いません)

Q4. interface

  1. この章をすべて読んでください
  2. 面積を求めるメソッド Area() float64 を持つinterface Shape を定義してください
  3. RectCircleShape として使えるように変更してください 円の面積は 円周率 * 半径 * 半径 で求められます。円周率は math.Pi で求められます。
  4. 最も面積が大きな Shape を返すメソッド Biggest を持つ Shapes[]Shape から作成してください。
  5. 引数dxとdy で指定された差分だけ移動する MoveBy メソッドを Shape に追加し RectCircle に実装してください。
  6. Shapes に その要素全てに対して MoveBy 呼び出すメソッド MoveBy を実装してください

Documentation

The Go Gopher

There is no documentation for this package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL