2020年5月10日日曜日

開発環境

入門Goプログラミング (Nathan Youngman(著)、Roger Peppé(著)、吉川 邦夫(監修, 翻訳)、翔泳社)のUNIT 6(ネズミの穴を下って)、LESSON 27(nilをめぐる騒動)練習問題の解答を求めてみる。

コード

package main

import "fmt"

type item string
type character struct {
 name     string
 leftHand *item
}

func (c character) String() string {
 if c.leftHand == nil {
  return fmt.Sprintf("%vは何も持っていない。", c.name)
 }
 return fmt.Sprintf("%vは左手に%vを持っている。", c.name, *c.leftHand)
}
func (c *character) pickup(i *item) {
 if c == nil || i == nil {
  return
 }
 c.leftHand = i
}
func (c *character) give(to *character) {
 if c == nil || to == nil || c.leftHand == nil {
  return
 }
 to.leftHand = c.leftHand
 c.leftHand = nil
}
func main() {
 sword := item("剣")
 king := character{name: "アーサー王"}
 fmt.Println(king)
 king.pickup(&sword)
 fmt.Println(king)

 var nilItem *item
 king.pickup(nilItem)
 fmt.Println(king)

 var knight character = character{name: "騎士"}
 fmt.Println(knight)
 king.pickup(nil)
 fmt.Println(knight)
 king.give(&knight)
 fmt.Println(king)
 fmt.Println(knight)
}

入出力結果(Zsh、PowerShell、Terminal)

% go run ./knights.go
アーサー王は何も持っていない。
アーサー王は左手に剣を持っている。
アーサー王は左手に剣を持っている。
騎士は何も持っていない。
騎士は何も持っていない。
アーサー王は何も持っていない。
騎士は左手に剣を持っている。
%

0 コメント:

コメントを投稿