diff --git a/README.md b/README.md index f110ad7..86fef43 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ smart people at [Hashrocket](http://hashrocket.com/). For a steady stream of TILs from a variety of rocketeers, checkout [til.hashrocket.com](https://til.hashrocket.com/). -_724 TILs and counting..._ +_725 TILs and counting..._ --- @@ -540,6 +540,7 @@ _724 TILs and counting..._ - [String Interpolation With Integers And Sprintf](reason/string-interpolation-with-integers-and-sprintf.md) - [String Interpolation With Quoted Strings](reason/string-interpolation-with-quoted-strings.md) - [Trying Out ReasonML In CodeSandbox](reason/trying-out-reasonml-in-codesandbox.md) +- [Two Ways To Find An Item In A List](reason/two-ways-to-find-an-item-in-a-list.md) - [Wrapping A Component For Use In JavaScript](reason/wrapping-a-component-for-use-in-javascript.md) ### Ruby diff --git a/reason/two-ways-to-find-an-item-in-a-list.md b/reason/two-ways-to-find-an-item-in-a-list.md new file mode 100644 index 0000000..2140a21 --- /dev/null +++ b/reason/two-ways-to-find-an-item-in-a-list.md @@ -0,0 +1,30 @@ +# Two Ways To Find An Item In A List + +The `List` module has the typical `find` function that you'd expect any +enumerable type to include. It has a very similar `find_opt` function as +well. The difference is in the return types. + +When using `List.find` you'll have to deal with the possibility of a +`Not_found` exception. + +```reasonml +switch (List.find(item => item.id == id, my_list)) { +| exception Not_found => print_endline("Not found!") +| item => print_endline("Found it: " ++ item.name) +} +``` + +The `List.find_opt` function has a more familiar interface that doesn't +require you to know the details of what exceptions could arise. All you want +to know is if it was found or _not_. This is achieved by having an +`option('a)` return type. + +```reasonml +switch (List.find_opt(item => item.id == id, my_list)) { +| None => print_endline("Not found!") +| Some(item) => print_endline("Found it: " ++ item.name) +} +``` + +See the [`List` module](https://reasonml.github.io/api/List.html) for more +details.