Files
learngo/11-if/questions/5-short-if.md
2018-11-12 01:06:45 +03:00

85 lines
2.1 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## How to fix this program?
```go
package main
import (
"fmt"
"time"
)
func main() {
if err != nil; d, err := time.ParseDuration("1h10s") {
fmt.Println(d)
}
}
```
1. Swap the simple statement with the `err != nil` check. *CORRECT*
2. Remove the error handling.
3. Remove the semicolon.
4. Change the short declaration to an assignment.
> **1:** Yes. In a short if statement, the simple statement (the short declaration there) should be the first part of it. Then, after the semicolon separator, there should be a condition expression.
>
> **2:** You don't want that. That's not the issue here.
## What does this program print?
```go
package main
import "fmt"
func main() {
done := false
if done := true; done {
fmt.Println(done)
}
fmt.Println(done)
}
```
1. true and true
2. false and false
3. true and false *CORRECT*
4. false and true
> **3:** Yes. It shadows the main()'s done variable, and inside the if statement, it prints "true". Then, after the if statement ends, it prints the main()'s done variable which is "false".
## There's a shadowing issue in this program. The program should print: 10, now it prints: 0.
**How can you fix this it?**
```go
package main
import (
"fmt"
"strconv"
)
func main() {
var n int
if n, err := strconv.Atoi("10"); err != nil {
fmt.Printf("error: %s (n: %d)", err, n)
return
}
fmt.Println(n)
}
```
_See the code also in here: https://play.golang.org/p/fDrmcXWGnQB_
1. Remove the first declaration (main()'s n variable).
2. Remove the declaration in the short-if (if's n).
3. Declare an error variable outside of the main.
4. Declare an error variable along with main's n variable, then change the short-if declaration to an assignment. *CORRECT*
> **1:** That will break the program. Because, the last line prints it.
>
> **2:** The program uses it to set the n.
>
> **3:** There will be "unused variable" error.
> **4:** Yes, that will solve the shadowing issue. Short-if will reuse the same 'n' variable (main()'s n). So, the converted number 'n' will be printed as: 10. See the solution here: https://play.golang.org/p/6jc-nZJNHYb