ฉันไม่สามารถสร้างตัวอย่าง javascript ที่ Brunno ใช้งานได้แม้ว่าโค้ดจะแสดงถึงแนวคิดที่ไม่มีจุดหมาย (เช่นไม่มีข้อโต้แย้ง) อย่างชัดเจน ผมจึงใช้ramda.jsเพื่อเป็นตัวอย่างอื่น
สมมติว่าฉันต้องหาคำที่ยาวที่สุดในประโยคโดยกำหนดสตริงที่"Lorem ipsum dolor sit amet consectetur adipiscing elit"
ฉันต้องการผลลัพธ์เช่น{ word: 'consectetur', length: 11 }
ถ้าฉันใช้โค้ดสไตล์ JS ธรรมดาฉันจะเขียนโค้ดแบบนี้โดยใช้แผนที่และฟังก์ชันลดขนาด
let str = 'Lorem ipsum dolor sit amet consectetur adipiscing elit'
let strArray = str.split(' ').map((item) => ({ word: item, length: item.length }))
let longest = strArray.reduce(
(max, cur) => (cur.length > max.length ? cur : max),
strArray[0])
console.log(longest)
กับ ramda ฉันยังคงใช้แผนที่ & ลด แต่ฉันจะเขียนโค้ดแบบนี้
const R = require('ramda')
let longest = R.pipe(
R.split(' '),
R.map((item) => ({ word: item, length: item.length })),
R.reduce((max, cur) => (max.length > cur.length ? max : cur), { length: 0 })
)
let tmp = longest(str)
console.log(tmp)
ฉันจะเถียงว่าส่วนสำคัญของรหัส ramda ของฉันคือท่อที่เชื่อมโยงการทำงานของฉันเข้าด้วยกันและทำให้วัตถุประสงค์ของฉันชัดเจนขึ้น ไม่จำเป็นต้องสร้างตัวแปรชั่วคราวstrArray
เป็นโบนัส (ถ้าฉันมีมากกว่า 3 ขั้นตอนในไปป์มันจะกลายเป็นโบนัสจริง)