2016-07-28 11 views

Antwort

6

Da der Nullwert für eine int80 ist, ist der Else-Zweig nicht erforderlich.

bitSet := true 
var bitSetVar int8 
if bitSet { 
    bitSetVar = 1 
} 

Es gibt keine conversions von bool Typen integer. Die if-Anweisung ist das Beste, was Sie tun können.

0

In Bezug auf die Speichereffizienz, indem Sie Ihre Ansatz geht

if bitSet { 
    bitSetVar = 1 
} else { 
    bitSetVar = 0 
} 

tun Sie keine zusätzlichen Variablen nicht verwenden Ihre bitSetVar zu setzen, daher würde ich sagen, dass dies das Beste ist, man erwarten konnte.

In Bezug auf die Laufzeit, Sie sind:

  1. Überprüfung der Wert von BitSet einmal, die die geringste Anzahl von Malen Sie tun sollten.

  2. Setzen Sie den Wert von bitSetVar einmal, die Sie vorhaben zu tun.

Bis jetzt, würde ich sagen, Sie haben so wirksam wie Sie sein können.

In Bezug auf die Benutzer Lesbarkeit, wenn Sie, dass dieses kleine Code-Snippet fühlen wird Ihr Code nicht weniger ansehnlich zu machen, können Sie es in eine Funktion verschieben könnte, rufen Sie es vielleicht checkBitSetVar, wie folgt aus:

func checkBitSetVar(mybool bool) int8{ 
    if mybool{ 
     return 1 
    } 
    return 0 //you just saved youself an else here! 
} 

und in der Hauptsache:

setBitVar = checkBitSetVar(bitSet) 

Ich denke, das ist das Beste, was Sie aus Go bekommen können.

1

Ihr Weg ist derzeit der beste, weil es schnell ist, mit der gleichen Weise, wie Sie Int8 zu Bool konvertieren können, noch einfacher. Sie können auch 1 Zeile speichern:

var bitSetVar int8 
if bitSet { 
    bitSetVar = 1 
} 

Go Gemeinschaft hatte ein Problem, diese Umwandlung zu implementieren, aber scheint, dass nicht alle Menschen zustimmen.

2

ja das ist der beste Weg (schnell und optimiert):

bitSet := true 
bitSetVar := int8(0) 
if bitSet { 
    bitSetVar = 1 
} 

var bitSetVar int8 oder bitSetVar := int8(0) innerhalb einer Funktion verwendet, ist das gleiche, und Sie brauchen nicht else Teil, weil die bitSetVar mit Null initialisiert vor das if Statement.
während if mit OK ist (und schnell) wie diese B2i Funktion:

func B2i(b bool) int8 { 
    if b { 
     return 1 
    } 
    return 0 
} 

aber Sie haben eine andere Option map zu verwenden (nicht so schnell wie if, aber nett und schön hier zeigen):

var b2i = map[bool]int8{false: 0, true: 1} 

wie dieser Arbeitsbeispielcode (mit kommentierten Ausgänge):

package main 

import "fmt" 

var b2i = map[bool]int8{false: 0, true: 1} 

var i2b = []bool{false, true} 

func B2i(b bool) int8 { 
    if b { 
     return 1 
    } 
    return 0 
} 
func main() { 
    fmt.Println(B2i(true)) // 1 
    fmt.Println(B2i(false)) // 0 

    fmt.Println(b2i[true]) // 1 
    fmt.Println(b2i[false]) // 0 

    fmt.Println(i2b[1]) // true 
    fmt.Println(i2b[0]) // false 
}