这可能是重复的,因为我脑子里找不到单词甚至刺激查询。
尽管我每天都在使用PHP,C#,JavaScript,但是只有在JavaScript中,我才能像疯子一样将链条开箱即用。
例如,给出一个简单的算法(我知道它有点模糊):
给出一个任意值数组,将数据转换为包含唯一值乘以两个大于6的值。
在PHP7中,我可以像这样实现它:
<?php
$initial = [2, 3, 4, 5, 6, 7, 8, 9, 2, 2, 2, 3, 3, 4, 4, -1, -3, -5];
$multiplied = array_map(function ($v) {
return $v * 2;
}, $initial);
$unique = array_unique($multiplied);
$matching = array_filter(function($v) {
return $v > 6;
}, $unique);
var_dump($initial, $matching);
// Or this crazy variation.
$matching = array_filter(array_unique(array_map(function($v) {
return $v * 2;
}, $initial)), function ($v) {
return $v > 6;
});
var_dump($initial, $matching);
尽管,JavaScript:
var filterUnique = function(value, index, collection) {
return collection.indexOf(value) === index;
};
var initialData = [2, 3, 4, 5, 6, 7, 8, 9, 2, 2, 2, 3, 3, 4, 4, -1, -3, -5];
var data = initialData.map(function(v) {
return v * 2;
}).filter(filterUnique).filter(function(v) {
return v > 6;
});
console.log(initialData.length, initialData)
console.log(data.length, data);
在C#中有很多选项。Linq是最简单的选项,实际上允许以类似于JavaScript的方式执行操作。虽然,那里的底层结构是不同的。但是,如果我想走困难的路,由于C#的严格性质,我将面临类似的情况,例如PHP中带有显式声明,以及更多情况。
此链接原理/范例叫什么?我还能找到其他什么语言?
[我倾向于将其称为函数式编程,但是在阅读函数式语言时,这里的描述要比这还要泛泛。。。我希望消除对此的误解。
我已经使用PHP多年了,实际上,拥有TyeObjects的问题几乎很容易,尤其是当您开始谈论比较时:Number(23)等于23,Int(23)与23.5相比,Int (0)vs 0,vs null ...
就我所知,它对Java(非脚本)开发人员在实施时造成了很多麻烦。
因此,最“明显”的方法是实现Int / Float类或Number来收集它们,String类等以及所有相关功能。这是对PHP的真正需求,但将非常耗时。
另一种解决方案,更容易的是,因为所有函数都是在PHP中以蛇形/ C风格编写的,并且几乎所有方法都是在驼峰式的情况下,您可以像这样创建一个调用管道
echo (new Pipe("my super cool string"))->strtoupper()->apply();
这将打印
MY SUPER COOL STRING
并且您可以根据需要链接尽可能多的本机函数。
就我而言,我的首要需求是异步进行一些流畅的调用,因此其调用方式略有不同,首先是要调用对象的方法,但是以下代码可与我的lib一起使用:
$chainOfCalls = DefferredCallChain::new_("string")
->strtoupper()
->explode(' ', '$$')
->array_reverse()
->print_r();
$chainOfCalls("My string I want to modify");
// prints ['MODIFY', 'TO', 'WANT', 'I', 'STRING', 'MY']
在这里可用:https://github.com/jclaveau/php-deferred-callchain
关于范式分类,首先要注意函数式编程/纯函数式语言/函数式语法之间的差异。
实际上,流利的(链接的)语法就像在阅读时尊重重力的功能语法(例如,您从左上角开始阅读,在右下角结束)。这对我来说似乎是大脑消耗更少的东西。
希望它能回答您的问题:)