Find and Delete the Functional Way

Let's say, in Elm, you have a model contains a list of objects, like this:

type alias Task = {
    name: String,
    status: String
  }

type alias Model = {
  tasks: List Task
}

And you're making a CRUD application.

You can easily add a new Task into the model in the functional way, very simple:

newModel = { model | tasks = model.tasks ++ [ Task "Imma new task" "To Do" ] }

Now you want to write a deleteTask function, let's keep it simple, this function expects a String, and remove the Task has that string as a name.

In imperative way, we can iterate through the List, looking for an item that matched the search condition, obtain its index and remove any item at that index.

In functional way, iterating is such a PITA. So you don't wanna do it. Instead of thinking how to find the index of an item, then remove it (which consist two actions, or expressions), let's think differently. What if we can look for an item, and remove it at the same time?

Just like using map (apply some function to every item in the list, returns a new list), we have filter (apply a filter to every item in the list, return a new list that contains any item that matched). So in this case, we just need to filter out the desired item from the list.

newModel = { model | tasks = List.filter (\x -> x.name /= name) model.tasks }

Hey, what? Is this seems obvious?

Yeh, it's it. For people who came from a functional programming background. But it's not the "natural way of thinking" for people who came from imperative languages.

And this is what I really like when learning FP. You gotta think differently to solve the problem.

huytd 29-04-2018

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Huy Trần

118 bài viết.
1838 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
172 46
Tại sao phải viết blog kĩ thuật? Có rất nhiều bài viết trên mạng nói về vấn đề tại sao một lập trình viên nên thường xuyên viết các bài blog kĩ thu...
Huy Trần viết hơn 3 năm trước
172 46
White
151 39
(Ảnh) Tiếp tục sêri (Link) lần này, chúng ta sẽ cùng tìm hiểu và mô phỏng lại một chức năng mà mọi người đang bắt đầu sử dụng hằng ngày, đó là chứ...
Huy Trần viết hơn 2 năm trước
151 39
White
113 17
Phần 1: Tự truyện Tui và Toán đã từng là hai kẻ thù không đội trời chung trong suốt hơn mười lăm năm ròng rã. Ngay từ ánh nhìn đầu tiên đã ghét nh...
Huy Trần viết hơn 2 năm trước
113 17
Bài viết liên quan
White
14 6
Người ta nói "nullable values" là cái "billion dollar mistake". Kể từ ALGOL, chúng ta không thể dùng nullable values/references như một value bình ...
Justin Le viết hơn 3 năm trước
14 6
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
118 bài viết.
1838 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!