Selamat datang kembali ke berita gembira pemrograman fungsional lainnya. Sebelumnya Saya menulis tentang penggunaan fungsi peta. Fungsi map hanya mengambil fungsi dan iterable sebagai argumen dan menerapkan fungsi tersebut ke setiap anggota iterable tersebut. Hari ini kami akan bekerja dengan alat baru untuk ditambahkan ke perangkat kami — filter. Mari kita mulai! Pernahkah Anda ingin memfilter item tertentu dalam daftar berdasarkan apakah item tersebut mengikuti kriteria tertentu? Seperti namanya, fungsi filter melakukan hal itu.

Saring

Bayangkan, sekali lagi, bos Anda menugaskan Anda tugas untuk membuat aplikasi web pemilahan makanan yang memfilter (Dapatkan? filter…tidak…Saya akan melanjutkan…) produk susu dan produk daging dari daftar perusahaan berbagai produk makanan. Anda menarik lengan baju Anda dan mulai melihat basis kode yang diberikan atasan Anda.

# We manage our inventory within the inventory attribute
class Company(object):
 def __init__(self, name,inventory):
 self.name = name
 self.inventory = inventory

# Each product contains a type, category and a name
class Product(object):
 def __init__(self,type,category,name):
 self.type = type
 self.category = category
 self.name = name
milk = Product(“food”,”dairy”,”milk”)
cheese = Product(“food”,”diary”,”cheese”)
yogurt = Product(“food”,”diary”,”yogurt”)
chicken = Product(“food”,”meat”,”chicken”)
steak = Product(“food”,”meat”,”steak”)
wings = Product(“food”,”meat”,”wings”)
# We set up a list of products here that our company ships out
list_of_products = [milk,cheese,yogurt,chicken,steak,wings]
# We define our company here
cool_foods = Company(“Cool Foods”, list_of_products)

Langkah pertama Anda mungkin dengan membuat fungsi yang menggunakan produk sebagai argumen, mengembalikan nilai benar atau salah, lalu mengevaluasi produk dalam satu lingkaran dan menyimpan produk yang sesuai dengan kriteria Anda ke dalam daftar lain. Masalahnya adalah Anda sudah menulis terlalu banyak kode. Mari kita lakukan ini dengan cara yang “fungsional”.

# First we make a "filtering" function. I call this the "BIG LIVER". It sounds good.
def filter_out_diary_products(product):
 if product.category == “meat”:
   return True
 else:
   return False
# The "BIG LIVER" has the job of filtering out any product that is not a meat product.
filtered_products =  filter(filter_out_diary_products, xyzco.inventory)

Saya senang Anda bertanya. Tidak ada keajaiban di sini, ini hanya alat yang luar biasa. Filtermengambil fungsi sebagai argumen dan menerapkan, seperti fungsi peta, fungsi tersebut ke setiap nilai dari sebuah iterable. Kecuali kali ini mencari kriteria dan kriteria tersebut adalah apakah nilai yang diteruskan ke fungsi tertentu bernilai benar atau tidak. Anda ingin mengevaluasi nilai berdasarkan apakah nilai tersebut salah? Tidak masalah, Anda punya filterfalse di pihak Anda. Saya harap postingan blog hari ini menurut Anda cukup lucu. Saya tahu Anda masih bingung dengan kehebatan pemrograman fungsional, tapi bertahanlah, akan ada lebih banyak kejutan yang akan datang.