lettura di interi: con bufioscanner.Text()
(e anche con fmt.Scan(s string)
, ma perché?!?
fmt.Scan(&num)
con num int
Se vi accorgete che fate conversioni avanti e indietro (ad es. int -> string -> int
o string -> int –> string
), fatevi due domande su se/come evitare la cosa (vedi sopra)
controlli a posteriori. Es. su os.Args
o con !=EOF
dopo aver usato il dato che non c’è. Vanno fatti sempre prima
lettura delle specifiche: spesso è approssimativa (e vi penalizza)
uso dei test e sistemazione dei FAIL : qualcuno sembra non usarli o non guardare proprio le segnalazioni (e sembra non far girare nemmeno il programma, al di là dei test da noi forniti), non ci fate bella figura, soprattutto quando gli errori sono delle banalità: sorge il legittimo dubbio che non sappiate testare i programmi e/o correggere l’errore. Vi invito quindi a dimostrare di sapere almeno testare, se non correggere. Potreste mettere dei commenti nel codice del vostro programma in cui indicate quali sono i test non passati o gli aspetti che sapete andrebbero sistemati, anche tutti insieme in una sezione “TO DO”.
ridondanze nel codice: se vedete istruzioni o blocchi di istruzioni che si ripetono identici o quasi in più punti del vostro programma, vede come / se è possibile evitare la ripetizione
attenzione ad implementare correttamente il pattern precedente-corrente. Nel codice che segue, viene (impropriamente) fatta la conversione di ogni elemento i
due volte: all’iterazione i
-esima e alla i+1
-esima (no comment qui sulla conversione byte-string-int, vedi poi sotto)
for i := 0; i < len(num); i++ {
cifraAttuale, _ := strconv.Atoi(string(num[i]))
cifraPrecedente, _ := strconv.Atoi(string(num[i-1]))
Lo schema corretto è il seguente:
for i := 0; i < len(num); i++ {
cifraPrecedente = cifraAttuale
cifraAttuale, _ := strconv.Atoi(string(num[i]))
for
e un dato che viene usato solo all’iterazione i
-esima, non serve che quel dato stia in memoria dall’inizio alla fine.else
, ma qualche volta sì; in questo caso ci vorrebbe:if temperatura > max {
max = temperatura
}
if temperatura < min {
min = temperatura
}
walk = make([]Location,0,10)
lettera = 10
; lettera = 32
. Usate per favore i letterali ' '
e '\n'
, oltre a 'a'
, ecc// inutile conversione byte ->stringa -> int per fare un confronto
cifraAttuale, _ := strconv.Atoi(string(num[i]))
if cifraPrecedente <= cifraAttuale {
numeroAttuale += string(num[i])
} else {
fmt.Println(numeroAttuale)
numeroAttuale = string(num[i])
---
//ma i byte sono numeri! Quindi posso fare direttamente
if num[i-1] <= num[i]
Non so se la lista è completa, ma almeno avete una prima manciata di spunti su cui riflettere e lavorare.