2020年4月24日金曜日

開発環境

入門Goプログラミング (Nathan Youngman(著)、Roger Peppé(著)、吉川 邦夫(監修, 翻訳)、翔泳社)のUNIT 3(関数とメソッド)、LESSON 14(ファーストクラス関数)の練習問題の解答を求めてみる。

コード

package main

import (
 "fmt"
 "math/rand"
 "time"
)

type kelvin float64
type sensor func() kelvin

func calibrate(s sensor, offset kelvin) sensor {
 return func() kelvin { return s() + offset }
}
func main() {
 offset := kelvin(5)
 realSensor := func() kelvin {
  return 0
 }
 sensor := calibrate(realSensor, offset)
 fmt.Println(sensor())
 offset++
 fmt.Println(sensor())
 rand.Seed(time.Now().UnixNano())
 fakeSensor := func() kelvin {
  return kelvin(rand.Intn(151) + 150)
 }
 sensor = calibrate(fakeSensor, 5)
 for i := 0; i < 10; i++ {
  fmt.Println(sensor())
 }
}

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

% go build calibrate.go
% ./calibrate 
5
5
246
292
205
173
239
223
192
220
263
277
% ./calibrate
5
5
266
289
212
185
303
253
260
170
182
266
% ./calibrate
5
5
156
222
249
276
238
256
234
271
289
262
% ./calibrate
5
5
297
212
177
185
277
180
166
203
164
170
% ./calibrate
5
5
207
204
258
296
207
198
260
260
260
263
% 

0 コメント:

コメントを投稿