Golang noob hier, zit al een week te puzzelen hoe ik deze code kan vereenvoudigen.
Code nu:
Nu zijn de implementaties van SearchValue bijna hetzelfde voor de 8 bit en de 16 bit variant:
Het enige verschil is het casten naar uintX.
Hoe kan ik deze code herstructureren om code duplicatie te verminderen?
Is er geen interface die uint8 en uint16 bevat die ik kan gebruiken?
Code nu:
Go:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| package memmap type UInteger interface { Value(vid uint32) (uint64, error) SearchValue(value uint64) (*[]uint32, error) SearchMinMax(min *uint64, max *uint64) (*[]uint32, error) } type UInteger8 struct { Code string Min uint8 Max uint8 Unit string memmap []uint8 length uint32 } type UInteger16 struct { Code string Min uint16 Max uint16 Unit string length uint32 memmap []uint16 } |
Nu zijn de implementaties van SearchValue bijna hetzelfde voor de 8 bit en de 16 bit variant:
Go:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| func (this UInteger8) SearchValue(value64 uint64) (*[]uint32, error) { var result []uint32 if value64 <= this.AbsMax { value := uint8(value64) if value >= this.Min && value <= this.Max { result = make([]uint32, 0, this.length) for vid := uint32(0); vid < this.length; vid++ { if this.memmap[vid] == value { result = append(result, vid) } } } } return &result, nil } func (this UInteger16) SearchValue(value64 uint64) (*[]uint32, error) { var result []uint32 if value64 <= this.AbsMax { value := uint16(value64) if value >= this.Min && value <= this.Max { result = make([]uint32, 0, this.length) for vid := uint32(0); vid < this.length; vid++ { if this.memmap[vid] == value { result = append(result, vid) } } } } return &result, nil } |
Het enige verschil is het casten naar uintX.
Hoe kan ik deze code herstructureren om code duplicatie te verminderen?
Is er geen interface die uint8 en uint16 bevat die ik kan gebruiken?
Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.