gpt4 book ai didi

javascript - 如何调用能够从 native 对象进行链接的原理/范式?

转载 作者:行者123 更新时间:2023-11-28 04:54:00 28 4
gpt4 key购买 nike

这可能是重复的,因为我无法在脑海中找到单词来激发查询。

我每天都在使用 PHP、C#、JavaScript,但只有在 JavaScript 中我才能像疯子一样开箱即用。

例如,给定一个简单的(我知道它有点模糊)算法:

Given an array of arbitrary values, transform the data to contain unique values multiplied by two that are greater than 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) 与 0、与 null...

据我所知,它在实现它时给 Java(而不是脚本)开发人员带来了很多麻烦。

因此,最“明显”的方法是实现类 Int/Float 或 Number 来收集它们、类 String 等以及所有相关函数。这是 PHP 的真正需求,但会非常耗时。

另一个更简单的解决方案是考虑到,由于 PHP 中的所有函数都是以蛇形命名法/C 风格编写的,并且几乎所有方法都采用驼峰式命名法,因此您可以创建一个像这样的调用管道

echo (new Pipe("my super cool string"))->strtoupper()->apply();

这将打印

MY SUPER COOL STRING

您可以根据需要链接任意数量的 native 函数调用。

就我而言,我的第一个需要是异步进行一些流畅的调用,因此它的调用方式略有不同,首先是为了调用对象的方法,但以下代码可以与我的库一起使用:

$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

关于范式分类,首先要注意函数式编程/纯函数式语言/函数式语法之间的区别。

  • 函数式编程就是使用函数。
  • 纯函数式编程是一种只有函数而没有状态的专用范例(因此副作用较少)。 Lisp 就是一个很好的例子。
  • 函数式语法是一种类似于纯函数式范例但使用 PHP 等命令式语言的编写方式。

实际上,流畅的(链式)语法就像阅读时尊重重力的函数语法一样(例如,您从左上角开始阅读,从右下角结束)。在我看来,这就是消耗大脑较少的东西。

希望它能回答您的问题:)

关于javascript - 如何调用能够从 native 对象进行链接的原理/范式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42694343/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com