今天在群里有人问,软件开发中的函数和数学中的函数除了名字一样,还有啥一样的地方嘛?
某人回答:除了名字一样,没啥一样的了。
于是乎,我就去查了一下 function 这个单词的意思。
function 这个单词,可以被翻译为,功能,作用,函数等多重意思。
感觉在编程中,被翻译成功能块或者代码块,更合适。
直接叫函数,感觉有点不恰当呢。
这是不是, IT 行业的翻译害人系列呢?
1
ynyounuo 2016-08-12 12:50:57 +08:00
|
2
GordianZ MOD 为什么不是函数呢?
y=sin(x) 跟 var result = print("hello") 有什么区别么? |
3
lxrmido 2016-08-12 12:51:26 +08:00
|
4
21grams 2016-08-12 12:51:55 +08:00
软件开发中的函数和数学中的函数是有关系的,他们叫一个名字可不是什么巧合。
|
5
bdbai 2016-08-12 12:54:11 +08:00 via Android
个人认为两个函数的相同点在于,给定输入值,通过一定计算,返回一个值。编程中函数远比“功能块”“代码块”复杂,有必要区分开。
举个例子, Javascript 以及各种 函数式语言。 |
6
ynyounuo 2016-08-12 12:57:06 +08:00
|
7
soland 2016-08-12 12:57:54 +08:00
软件开发中的函数,数学中的函数
最终的含义是一样的。 |
9
learnshare 2016-08-12 13:03:00 +08:00 2
代码中,叫函数;代码功能上,叫方法;软件层面,叫功能。这不就和谐了
|
10
bdbai 2016-08-12 13:04:39 +08:00 via Android
|
11
bdbai 2016-08-12 13:05:42 +08:00 via Android
@learnshare 函数和功能不应该对应起来。不是一个层面的东西。
|
12
hronro 2016-08-12 13:05:48 +08:00 via Android
一般编程中的函数都有副作用,而数学中的函数没有。建议去看看函数式编程中 pure function 的概念
|
13
Kisesy 2016-08-12 13:11:32 +08:00
很多编程书里也写成子程序
|
16
levn 2016-08-12 13:30:09 +08:00
学 haskell 喽
|
17
learnshare 2016-08-12 13:33:37 +08:00
@bdbai 所以我分了三个层面
|
18
BOYPT 2016-08-12 13:37:23 +08:00
以前学 basic 就没搞清楚怎么又有 Sub 又有 Function 。
汇编里面的函数就叫 PROC ,过程吧。 其实啊,程序语言是数学语言的一个子集,程序函数是数学函数的子集。 |
19
SpicyCat 2016-08-12 13:39:26 +08:00 1
在找到更好的翻译之前,还是用 「函数」 这个翻译吧。
「功能块」 或者 「代码块」 比 「函数」 这个翻译更差。 |
20
bdbai 2016-08-12 13:40:40 +08:00 via Android
|
21
Cee 2016-08-12 13:45:05 +08:00
Like procedure vs. function
|
22
kooze 2016-08-12 13:46:11 +08:00
心里明白就好,用英文去思考。
|
23
imn1 2016-08-12 13:57:40 +08:00
$trans en:zh function
function /ˈfəNGkSHən/ 功能 (Gōngnéng) Definitions of function [ English → 简体中文 ] noun 功能 function 函数 function 作用 effect, action, function, activity, intention 机能 function 性能 performance, property, capability, function 功用 function, effect, use 官能 function, sense 意向 intention, intent, purpose, disposition, aim, function verb 活动 exercise, move about, move around, behave, function 行使职责 function ---------------------------------------- 嗯,我觉得“官能”这个翻译好 |
25
zhaohui318 2016-08-12 14:12:17 +08:00
类似的还有 map
|
26
kideny OP @bdbai 我是在跟你讨论 function 的中文翻译,而不是讨论 function 这个单词。参与讨论前,请先看清楚再说话。
|
27
kideny OP 数学里的函数,等号左右两边是相等的吧;
程序里把 function 赋值给变量,仅仅是赋值,那是=号嘛? 因为 function 可以赋值给变量,写法跟数学函数一样用等号, 就说编程的 function 跟数学函数是一个意思,这是典型的偷换概念吧。 |
28
kideny OP 再说了,变量可以赋值任何东西,跟数学的函数有毛关系?
|
31
czheo 2016-08-12 15:06:32 +08:00 2
那 block 翻译成什么
|
32
kideny OP |
33
kideny OP @czheo 一个英文单词应该翻译成什么,肯定跟他用在什么地方有关。 function 这个词,最早在数学里翻译过来,也是叫方程式的,也不是叫函数的。
慢慢也不知道怎么搞的,数学里开始叫函数,编程里也叫函数。 鬼知道,这个函数是什么鬼啊。 但是你跟老外说 function ,大家都知道。 就像你跟外国人说小姐是鸡,他肯定傻逼半天。 |
34
trcnkq 2016-08-12 15:31:43 +08:00
数学里“函数”本来也叫“映射”: input -> output
只是很多很常见的计算机语言语言允许让函数有*副作用*,于是成了: <input, 之前的 env> -> <output, 之后的 env>,然而本质还是“映射”。 函数式语言推崇让函数不产生副作用,返璞归真,回到它原始的含义。 |
35
levn 2016-08-12 15:35:12 +08:00 1
@kideny
应该说,外国人在编程术语里使用 function 这个词的时候,指的就是和数学函数相关的那个意思。而不是什么“功能”的意思。毕竟最开始搞这些的都是搞学术的,最开始也是用来计算的。 那时候应该还没有应用软件工程师这种玩意儿吧。 |
36
cxbig 2016-08-12 15:36:54 +08:00 1
看看维基百科 https://zh.wikipedia.org/wiki/函数
图片已经很简明了,函数就是输入一个参数,得到一个结果。这和 function 在各程序语言里的功能是一样的。 |
37
kideny OP |
38
SuperMild 2016-08-12 16:01:21 +08:00 via iPhone
中文书面语是表意文字,把表音的外语翻译过来时是有先天问题的,怎么译都是错的,同时怎么译都是对的,以前人们外语水平不高不得不硬套汉字,现在的新出现的单词基本上都直接用英文了,这是趋势。
对于过去的单词,我认为要么沿用旧译法,真不想用,也别创造新译法了,直接用英语单词就好。 |
39
cxbig 2016-08-12 16:01:53 +08:00
|
42
cxbig 2016-08-12 16:21:39 +08:00
@kideny 明白了,你的观点是根本不认同“函数”这个中文翻译,尽管大多数中文资料都是沿用这个名字。
那么你喜欢用英文原文随便你咯。 我认识的懂中文的欧洲朋友对“函数”这个中文名字没有任何理解或沟通上的障碍。 |
43
chairuosen 2016-08-12 16:23:16 +08:00
sin(x)是函数 y=sin(x)是函数表达式
所以单讲函数,是没区别的 |
44
tairan2006 2016-08-12 17:47:28 +08:00
用函数没啥问题,特别是 haskell (手动滑稽)
如果是功能块,那高阶函数怎么翻译? |
45
qdzzyb 2016-08-12 18:00:20 +08:00
就叫它 坑
|
47
sharpy 2016-08-12 18:21:48 +08:00
h = h + 1
|
48
hcwhan 2016-08-12 18:27:23 +08:00 via Android
主要差异点 是副作用
|
49
czheo 2016-08-12 18:53:04 +08:00 1
lz 有上过大学么?方程是 equation 好不好, function 在数学里的严谨定义一直都是集合的映射。不是说 function 里面有个 f 和 c 就是方程了。
|
50
Death 2016-08-12 20:30:23 +08:00 via Android
“函数”是一类“关系”,所以并没有什么问题
|
51
ooonme 2016-08-12 20:42:27 +08:00 via iPhone
function vs method
|
52
ovear 2016-08-12 21:24:12 +08:00 via Android
输入输出模型,冯诺依曼体系。。函数这翻译很贴切呀,没用到输入输出的,用的是 side effect 副作用。。
|
53
hinkal 2016-08-12 21:54:14 +08:00
楼主没上过大学+1 。简直莫名其妙, 英语里数学函数和软件函数也是一个单词,要怪也不能怪翻译人员,而是怪该英文术语的发明者。况且这两次关系密切。误人子弟的是你那群里的某人吧。譬如就误了楼主你来这发帖
|
54
wuxinli1025 2016-08-12 23:43:52 +08:00
功能(function)=方法(method)
不喜欢被叫函数, 但是感觉函数是最准确的翻译, 好纠结。 |
55
aprikyblue 2016-08-13 01:37:17 +08:00 via Android
设 A , B 是非空的数集,如果按照某种确定的对应关系 f ,使对于集合 A 中的任意一个数 x ,在集合 B 中都有唯一确定的数 y 和它对应,那么就称 f: A→B 为从集合 A 到集合 B 的一个函数,记作 y=f(x),x∈A
|
56
Rothschild 2016-08-13 05:05:57 +08:00
ls 培训班出来的越说越暴露自己知识水平啊
|
57
paulagent 2016-08-13 05:36:48 +08:00
没必要为了翻译问题吵架,计算机出现的晚,很多概念当初都是有别的背景的人提出来的,他们当年就是从本专业里找出来个概念来套上去,等后来计算机火了,再想改已经来不及了。除非你不想向后兼容了。
|
58
orancho 2016-08-13 06:04:37 +08:00
恭喜楼主加入 bloqué豪华午餐
|
59
ericls 2016-08-13 06:37:15 +08:00
只有 functional 的 function 是 function
其他的 function 是 subroutine 一个 function 给定相同的输入 应该永远给相同的输出 不用谢 |
61
binux 2016-08-13 07:20:25 +08:00
@ericls 即使带状态转移的 function 依旧是 function
将子程序简化为 DFA 后,状态转移函数( transition function )依旧是 function ,它的输入包括状态。给定相同的输入依然满足永远给相同的输出 |
63
binux 2016-08-13 07:42:07 +08:00
@ericls 如果发射火箭是「状态 a 置 1 」,即按钮按下。状态转移函数:状态 a 为 0 ,输入 1 , 1 ,状态 a 置 1 ,抛出 2 。那么它就是一个 transition function 。
|
64
newton108 2016-08-13 08:29:24 +08:00
这个问题有哪怕一丁点儿的意义?
|
65
v9ox 2016-08-13 09:47:47 +08:00 via iPhone
函数数学上把定义域映射到值域
程序里是对逻辑的封装,把 arguments 映射成 return value 我觉得是一回事啊 |
66
irgil 2016-08-13 12:25:19 +08:00
楼主没上过大学+1 ,代码块是 block ,有自己的定义和含义
|
67
oska874 2016-08-13 12:36:27 +08:00
离开上下文的翻译都是刷流氓。
|
68
jiongxiaobu 2016-08-13 12:44:19 +08:00 via iPhone
一直叫它函数 因为它就是函数。
|
69
Quaintjade 2016-08-13 12:57:20 +08:00 via Android
写过 VB 就知道,有 Function 和 Sub 两种东西,最大的区别在于, Function 必须有返回值, Sub 本身可以没返回值。所以 Function 就是函数,而 Sub 才更接近代码块。
|
70
Cu635 2016-08-13 14:48:24 +08:00
@learnshare
“方法”是面向对象程序设计的一个术语。 |
71
Cu635 2016-08-13 14:52:58 +08:00
“函数”定义上就是一个映射,只不过咱们从初中到高中再到非数学专业通修的高等数学 /微积分里面,学到的都是从数字或者向量映射到一个数字的函数。
如果把定义域和值域的概念都扩展,都不仅仅看作数字 /向量的集合话,不就能兼容编程当中的“函数”了?(也就是说,把那些“副作用”也看成值域的一部分,函数的参数是一个向量,值域是包括返回值和“副作用”的一系列操作组成的向量) |