为什么或者为什么不缩写某些数据类型的核心函数
Why or why not a shorthand for core functions for certain data types?
在Ruby中,您可以编写类似"hello".upcase
的东西,而在Javascript和Elm等许多其他语言中,这需要类似String.upcase("hello")
的样式。这感觉是多余的。
当库的名称表示函数的某个参数的数据类型(例如,像String.upcase(string_type_argument)
这样的函数),可能是[special character]upcase(string_type_argument)
时,是否有任何语言实现了与核心数据类型(字符串、列表/数组等)相关的函数的简写?这有利弊吗?
我意识到,在Elm中,一种选择是导入函数(例如import String exposing (..)
或import String exposing (some, specific, functions)
),但它们会令人困惑(导入具有潜在重叠函数名的整个核心库),或者会因为额外的工作而烦恼(使特定的函数导入与正在使用或未使用的内容保持最新)。
JavaScript使用原型,让我们以字符串为例:
String.prototype
本质上是所有字符串操作方法的容器。
示例:
String.prototype.toUpperCase = function() {
// makes the string uppercase and returns it
// this is a native method
}
您可以简单地在任意字符串上调用此函数,如下所示:
'var name = 'john';
name.toUpperCase() = //JOHN;'
甚至:
'john'.toUpperCase();
现在,让我们假设toUpperCase函数不存在,我们必须复制它的功能
我们可以通过以下几种方式:
将其添加到String.prototype:
String.prototype.NEWUPPERCASEFUNCTION = function() {
// we can refer to the 'string' that is always left of the dot with 'this'
// which is a reserved word in JS:
return 'this' in uppercase
}
这通常是不赞成的,并可能导致问题
另一种更常见的方法是,只创建一个函数,在该函数中传入一个字符串,并返回该字符串的大写版本,或者在"大写"之后返回该字符串:
function upperCaser(string) {
// not gonna write out the logic here, but you get it
return updated string
}
像String.doThing("str")
和"str".doThing()
这样的格式实际上没有区别。在Java中,这种差异被称为"静态"方法与"实例"方法。
当然有语言有简写编码格式,但唯一的区别是源代码的简洁性。"编译器"仍然生成相同的"已编译"代码(或非常相似的代码)。
区别在于Ruby和JavaScript是面向对象的语言,而Elm是纯函数式语言。
在面向对象的语言中,范例是定义一个类(像String
类),它将一些局部状态和一些方法打包在一起。这些方法有权读取本地状态并对其进行修改。"str"
是String
类的一个实例,因此它有一些可以被称为"on it"的方法可以访问该内部状态,因此例如可以返回"STR"
。
Elm是一种纯粹的函数式语言。它没有对象,只有接受这些值并返回其他值的值和函数。函数被分组为"模块",但模块没有任何本地状态,因为不存在"模块的实例"这回事。
可能令人困惑的部分是,Elm同时具有String
类型和String
模块,该模块封装了一组作用于字符串的函数。
因此,"str"
是String
类型的值,而toUpper
是一个函数,它接受String
类型的值并返回另一个String
类型的值。它是在String
模块中定义的,所以您可以像String.toUpper("str")
一样调用它,但String
是模块,而不是类型。
- javascript解释器如何理解变量的数据类型
- 从查询字符串参数推断出正确的数据类型
- 为什么不'我们在javascript中使用函数参数的数据类型
- 基于数据类型的编辑框的汇总列表
- 如何降低此函数的复杂性,该函数根据数据类型进行回调
- 比较和分配数据类型的困难
- 在javascript中调用函数/对象引用时,可容纳任何数据类型
- E4X中是否有一种方法可以将基元数据类型的XMLList转换为类似于Array.join()的Array
- Highcharts系列.数据数据类型限制
- 如何在php循环中显示隐藏的数据类型
- 如何从标签数据类型=“;无线电”;
- 如何使用 Java 脚本从 csv 文件中查找每列的数据类型
- 在 Javascript 中更改数据类型
- 抽象数据类型等效于类型
- JavaScript中的“符号”原始数据类型是什么?
- 数据类型Jasmine
- 有没有一种方法可以在Typescript中自动检查数据类型的数据相等性
- 了解JavaScript中的基元数据类型
- 当数据类型为XML时,如何将url参数传递给AJAX jquery
- 为什么或者为什么不缩写某些数据类型的核心函数