Pojmenovane parametry jsou fajn, napr. Scala je podporuje "out of the box", neni ani treba je nejak specialne resit.
def someFunction(firstParam: Int, secondParam: String, thirdParam: Boolean) {}
someFunction(
1,
"",
true
)
someFunction(
firstParam = 1,
secondParam = "",
thirdParam = true
)
V JS jsem to videl vetsinou resene pres options objekt, coz ve spojeni s kratkou syntaxi vytvoreni objektu je IMO celkem hezke:
function someFunction(options) {}
someFunction({
firstParam: 1,
secondParam: '',
thirdParam: true
});
Jsem nasel i nejaky udelator pro JS, ktery prevede funkci s nekolika pojmenovanymi parametry na funkci akceptujici options objekt.
// using http://stackoverflow.com/a/11796776/1017211
var someFunction2 = parameterfy(function (firstParam, secondParam, thirdParam) {
console.log(firstParam + ' ' + secondParam + ' ' + thirdParam);
});
someFunction2(
1,
'x',
true);
someFunction2({
firstParam: 1,
secondParam: 'x',
thirdParam: true
});
A po pravde nevim, co vam vadi na vyrazu pres nekolik radku. FP varianta na nekolik radku, kde kazdy dela jednu jednouduchou operaci se mi libi podstatne vice, nez mit nekolik cyklu na jeste vice radcich s ruznymi, nejlepe propletenymi, side-effecty jen proto, ze nekdo nezna zaklady FP v jeho jazyce.
Dokonce i ten trivialni priklad se mi libi vice FP stylem:
val redCars = cars
.filter(_.id == "ID2376")
.map(c => {c.color = "red"; c})
var redCarsNonFp = Seq[Car]()
for (car <- cars) {
if (car.id == "ID2376") {
car.color = "red"
redCarsNonFp :+= car
}
}
A co vic, FP zapis se da casto krasne napsat na jeden radek, druha varianta je vetsinou necitelna.
val redCars = cars.filter(_.id == "ID2376").map(c => {c.color = "red"; c})
var redCarsNonFpShort = Seq[Car](); for (car <- cars) { if (car.id == "ID2376") {car.color = "red"; redCarsNonFpShort :+= car}}