package main

import "fmt"

// Обявление функции (первая строчка до фигурных скобок - сигнатура функции)
// line и times - параметры функции
func repeatLine(line string, times int) {
	for i := 0; i < times; i++ {
		fmt.Println(line)
	}
}

func paintNeeded(width float64, height float64) (float64, error) {
	if width < 0 {
		return 0, fmt.Errorf("A width of %.2f is invalid", width)
	}
	if height < 0 {
		return 0, fmt.Errorf("A height of %.2f is invalid", height)
	}
	area := width * height
	return area / 10.0, nil
}

// Функция возвращающая значение (тип возврата - второй float64) и обязательно return
func double(num float64) float64 {
	return num * 2
}

// Множественный возврат из функци
func manyReturns() (int, bool, string) {
	return 1, true, "hello"
}

func main() {

	// Вызов функции( параметры становятся аргументами функции)
	repeatLine("hello", 4)

	// paintNeeded(4.2, 3.0)
	// paintNeeded(5.2, 3.5)
	// paintNeeded(5.0, 3.3)
	amount, err := paintNeeded(4.2, -3.0)
	fmt.Println(err)
	fmt.Printf("%.2f liters needed\n", amount)

	result := double(6.4) // Присвоение значения возврату из функции
	fmt.Print(result, "\n")

	myNum, myBool, myString := manyReturns()
	fmt.Printf("Num: %d, Bool: %t, String: %s\n", myNum, myBool, myString)
}
