move: pricing funcs project to x-tba

This commit is contained in:
Inanc Gumus
2019-04-23 00:30:53 +03:00
parent 15aeccdd4b
commit bb75efbaf8
7 changed files with 114 additions and 82 deletions

View File

@ -9,18 +9,24 @@ package main
// Remember: This should point to the directory exactly after GOPATH // Remember: This should point to the directory exactly after GOPATH
// Use / not \ even on Windows // Use / not \ even on Windows
import "github.com/inancgumus/learngo/x-tba/3-functions/xxx-project-pricings/pricing" import (
"fmt"
)
func main() { func main() {
// TODO: funcs can call other funcs // TODO: funcs can call other funcs
const data = `New York,100,2,1,100000 const data = `New York,100,2,1,100000
New York,150,3,2,200000 Hong Kong,150,3,2,300000
Paris,200,4,3,400000 Paris,200,4,3,250000
Istanbul,500,10,5,1000000` Istanbul,500,10,5,four hundred thousand`
props := pricing.New(data) props, err := parse(data)
pricing.Print(props) if err != nil {
fmt.Printf("> err: %s\n\n", err)
}
show(props)
// fmt.Printf("%#v\n", props.list) // fmt.Printf("%#v\n", props.list)
} }

View File

@ -0,0 +1,84 @@
// For more tutorials: https://blog.learngoprogramming.com
//
// Copyright © 2018 Inanc Gumus
// Learn Go Programming Course
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
//
package main
import (
"strconv"
"strings"
)
const separator = ","
// Parse parses the given data and returns a slice of Properties
func parse(data string) (props []property, err error) {
rows := strings.Split(data, "\n")
for _, row := range rows {
cols := strings.Split(row, separator)
loc := cols[0]
// size, err := strconv.Atoi(cols[1])
// if err != nil {
// return props, err
// }
// beds, err := strconv.Atoi(cols[2])
// if err != nil {
// return props, err
// }
// baths, err := strconv.Atoi(cols[3])
// if err != nil {
// return props, err
// }
// price, err := strconv.Atoi(cols[4])
// if err != nil {
// return props, err
// }
size, err := atoi(cols[1], err)
beds, err := atoi(cols[2], err)
baths, err := atoi(cols[3], err)
price, err := atoi(cols[4], err)
if err != nil {
return props, err
}
prop := property{
location: loc,
size: size,
beds: beds,
baths: baths,
price: price,
}
props = append(props, prop)
}
return
}
// atoi is a helper for strconv.Atoi
// it saves the previous error to simplify the error handling.
// usage:
// n, err := atoi(p, err)
// m, err := atoi(q, err)
func atoi(s string, err error) (int, error) {
// if there was an error return it instead: skip the Atoi
if err != nil {
return 0, err
}
n, lerr := strconv.Atoi(s)
if lerr != nil {
return 0, lerr
}
return n, nil
}

View File

@ -1,4 +1,4 @@
package pricing package main
import ( import (
"reflect" "reflect"

View File

@ -1,38 +0,0 @@
// For more tutorials: https://blog.learngoprogramming.com
//
// Copyright © 2018 Inanc Gumus
// Learn Go Programming Course
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
//
package pricing
import (
"strconv"
"strings"
)
// named result values
func parse(data string) (props []Property) {
rows := strings.Split(data, "\n")
for _, row := range rows {
cols := strings.Split(row, separator)
size, _ := strconv.Atoi(cols[1])
beds, _ := strconv.Atoi(cols[2])
baths, _ := strconv.Atoi(cols[3])
price, _ := strconv.Atoi(cols[4])
prop := Property{
Location: cols[0],
Size: size,
Beds: beds,
Baths: baths,
Price: price,
}
props = append(props, prop)
}
return
}

View File

@ -1,19 +0,0 @@
// For more tutorials: https://blog.learngoprogramming.com
//
// Copyright © 2018 Inanc Gumus
// Learn Go Programming Course
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
//
package pricing
// Property stores the data about a property
type Property struct {
Location string
Size, Beds, Baths, Price int
}
// Properties stores all the properties
type Properties struct {
list []Property
}

View File

@ -5,29 +5,29 @@
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/ // License: https://creativecommons.org/licenses/by-nc-sa/4.0/
// //
package pricing package main
import ( import (
"fmt" "fmt"
"strings" "strings"
) )
// Print prints the given properties // show shows the given properties
func Print(props Properties) { func show(props []property) {
printHeader() showHeader()
for _, p := range props.list { for _, p := range props {
fmt.Printf("%-15s", p.Location) fmt.Printf("%-15s", p.location)
fmt.Printf("%-15d", p.Size) fmt.Printf("%-15d", p.size)
fmt.Printf("%-15d", p.Beds) fmt.Printf("%-15d", p.beds)
fmt.Printf("%-15d", p.Baths) fmt.Printf("%-15d", p.baths)
fmt.Printf("%-15d", p.Price) fmt.Printf("%-15d", p.price)
fmt.Println() fmt.Println()
} }
} }
// printHeader prints the header // showHeader prints the header
func printHeader() { func showHeader() {
const header = "Location,Size,Beds,Baths,Price" const header = "Location,Size,Beds,Baths,Price"
for _, h := range strings.Split(header, separator) { for _, h := range strings.Split(header, separator) {

View File

@ -5,11 +5,10 @@
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/ // License: https://creativecommons.org/licenses/by-nc-sa/4.0/
// //
package pricing package main
const separator = "," // property stores data about a property
type property struct {
// New parses and returns a new Properties data location string
func New(data string) Properties { size, beds, baths, price int
return Properties{parse(data)}
} }