sabato 6 marzo 2010

GO: operazioni matematiche da terminale

Dopo che sono venuto a conoscenza dell'esistenza del linguaggio di programmazione di Google, ho cominciato a studiarlo con calma, per conoscere le sue caratteristiche e le librerie principali. Il linguaggio è interessante e si può dire essere una via di mezzo tra l'efficienza del C e il divertimento del Python (d'altronde, io conosco solo questi due linguaggi :-)). Ad ogni modo, mi sono divertito a scrivere uno script per effettuare operazioni matematiche da terminale. Lo posto!

package main



import "flag"
import "os"
import "strconv"


const NEWLINE string = "\n"


var (addFlag = flag.Bool("a", false, `add a and b`);
subFlag = flag.Bool("s", false, `subtract b to a`);
mulFlag = flag.Bool("m", false, `multiply a and b`);
divFlag = flag.Bool("d", false, `divide b from a`);
helpFlag = flag.Bool("help", false, `this help`))


func add(a, b int) int {
return a + b
}


func subtract(a, b int) int {
if a >= b {return a - b}
return -1
}


func multiply(a, b int) int {
return a * b
}


func divide(a, b int) int {
if b != 0 {
return a / b
}
return -1
}


func main() {
flag.Parse()
a, errA := strconv.Atoi(flag.Arg(0))
if errA != nil {a = -1}
b, errB := strconv.Atoi(flag.Arg(1))
if errB != nil {b = -1}

if *addFlag {
os.Stdout.WriteString(strconv.Itoa(add(a, b)) + NEWLINE)
} else if *subFlag {
os.Stdout.WriteString(strconv.Itoa(subtract(a, b)) + NEWLINE)
} else if *mulFlag {
os.Stdout.WriteString(strconv.Itoa(multiply(a, b)) + NEWLINE)
} else if *divFlag {
os.Stdout.WriteString(strconv.Itoa(divide(a, b)) + NEWLINE)
} else if *helpFlag {
flag.PrintDefaults()
}



Questo script usa la libreria flag per parsare le opzioni del programma, strconv per la conversione degli interi a stringhe e viceversa e di os per la gestione dell'output. Il programma è sicuramente migliorabile, però con questo esempio volevo dimostrare che, anche con poca esperienza di programmazione, con poche ore si possono ottenere buoni risultati! Per le istruzioni di compilazione vi rimando al sito ufficiale del linguaggio.
Ciao!

0 commenti:

Posta un commento