Membaca Pengantar Praktis untuk Pemrograman Fungsional Mary Rose Cook , ia memberikan contoh anti-pola
def format_bands(bands):
for band in bands:
band['country'] = 'Canada'
band['name'] = band['name'].replace('.', '')
band['name'] = band['name'].title()
sejak
- fungsi melakukan lebih dari satu hal
- namanya tidak deskriptif
- ini memiliki efek samping
Sebagai solusi yang diusulkan, ia menyarankan fungsi anonim pipelining
pipeline_each(bands, [call(lambda x: 'Canada', 'country'),
call(lambda x: x.replace('.', ''), 'name'),
call(str.title, 'name')])
Namun bagi saya ini tampaknya memiliki kelemahan yang bahkan lebih tidak dapat diuji; setidaknya format_bands dapat memiliki unit test untuk memeriksa apakah ia melakukan apa yang dimaksudkan, tetapi bagaimana cara menguji pipa? Atau apakah gagasan bahwa fungsi anonim begitu jelas sehingga tidak perlu diuji?
Aplikasi dunia nyata saya untuk ini adalah mencoba membuat pandas
kode saya lebih fungsional. Saya akan sering memiliki semacam pipa di dalam fungsi "munging"
def munge_data(df)
df['name'] = df['name'].str.lower()
df = df.drop_duplicates()
return df
Atau menulis ulang dengan gaya pipeline:
def munge_data(df)
munged = (df.assign(lambda x: x['name'].str.lower()
.drop_duplicates())
return munged
Adakah saran untuk praktik terbaik dalam situasi seperti ini?