2016-07-28 21 views

Odpowiedz

6

Ponieważ wartość zerowa dla int8 to 0, gałąź else nie jest konieczna.

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

Nie ma conversions z bool do całkowitych typów. Instrukcja if jest najlepsza, co możesz zrobić.

0

Pod względem wydajności pamięci, idąc za swoim podejściu robi

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

nie używasz żadnych dodatkowych zmiennych aby ustawić bitSetVar, stąd chciałbym powiedzieć, że to najlepsze co można się spodziewać.

Pod względem czasu wykonywania jesteś:

  1. Sprawdzanie wartości bitSet raz, która jest co najmniej kilka razy należy robić.

  2. Ustawienie wartości bitSetVar po wykonaniu, którą zamierzasz wykonać.

dotychczas, chciałbym powiedzieć, że nie były tak skuteczne, jak można być.

Pod względem czytelności użytkownika, jeśli czujesz, że ten mały fragment kodu czyni kod mniej reprezentacyjny, można przesunąć go do funkcji, może nazwać checkBitSetVar, tak:

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

i zasadniczo:

setBitVar = checkBitSetVar(bitSet) 

Myślę, że to najlepsze, co można wydostać z Go.

1

Twoja droga jest obecnie najlepsza, ponieważ jest szybka, z tym samym sposobem, w jaki można zamienić int8 na bool, jeszcze łatwiej. Możesz również zapisać 1 linię:

var bitSetVar int8 
if bitSet { 
    bitSetVar = 1 
} 

Społeczność, do której doszło, miała problem z wdrożeniem tej konwersji, ale wydaje się, że nie wszyscy ludzie się z tym zgadzają.

2

tak jest to najlepszy sposób (szybki i zoptymalizowany):

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

użyciu var bitSetVar int8 lub bitSetVar := int8(0) wewnątrz funkcji jest taka sama i nie trzeba else rolę, ponieważ bitSetVar wartość zero, zanim ta informacja o if.
podczas korzystania if jest OK (i szybko) jak to B2i funkcję:

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

ale masz inną opcję przy map zbyt (nie tak szybko, jak if, ale ładne i piękne, aby zobaczyć tutaj):

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

jak kod próbki pracy (z skomentowanych wyjść):

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 
}