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

111 bài viết.
1617 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
160 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 3 năm trước
160 46
White
149 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 2 năm trước
149 39
White
106 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
106 17
Bài viết liên quan
White
0 2
fCC: Technical Documentation Page note So I have finished the HTML part of this exercise and I want to come here to lament about the lengthy HTML ...
HungHayHo viết 2 tháng trước
0 2
White
19 1
Toán tử XOR có tính chất: + A XOR A = 0 + 0 XOR A = A Với tính chất này, có thể cài đặt bài toán sau với độ phức tạp O(N) về runtime, và với O(1)...
kiennt viết gần 2 năm trước
19 1
{{like_count}}

kipalog

{{ comment_count }}

bình luận

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


White
{{userFollowed ? 'Following' : 'Follow'}}
111 bài viết.
1617 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á!