52 lines
1.0 KiB
Markdown
52 lines
1.0 KiB
Markdown
## 3.1. The alternative
|
|
|
|
### The if structure
|
|
```Ocaml
|
|
if cond then expr1 else expr2
|
|
```
|
|
> ⚠️ `expr1` and `expr2` have to be the same type. `cond` is a `bool`
|
|
|
|
**For exemple**
|
|
```Ocaml
|
|
# if 1<2 then "higher" else "lower" ;;
|
|
-: string = "higher"
|
|
```
|
|
|
|
**Exercise : absolute program**
|
|
```Ocaml
|
|
# let abs(x) =
|
|
if x>0 then x
|
|
else -x ;;;
|
|
val abs : int -> int <fun>
|
|
```
|
|
|
|
## 3.2. Exceptions
|
|
### Division by 0:
|
|
```Ocaml
|
|
# 1/0
|
|
Exception : Division by zero
|
|
```
|
|
|
|
### Failwith:
|
|
Failwith is a function that take a string argument (the reason) and return the error. That way, we can raise an error into our code
|
|
```Ocaml
|
|
# failwith;;
|
|
-: string -> a = <fun>
|
|
|
|
# failwith "oops";;
|
|
Exception : Failwith "oops"
|
|
```
|
|
|
|
### invalid_arg:
|
|
Invalid_arg is a function that take a string argument (the reason) and return the error. That way, we can raison an error about an argument
|
|
```Ocaml
|
|
# invalid_arg "oops";
|
|
Exception: Invalid_argument "oops"
|
|
|
|
(*example*)
|
|
# let div a b =
|
|
if b = 0 then invalid_arg("div: b = 0")
|
|
else a/b ;;;
|
|
val div int -> int -> int = <fun>
|
|
```
|