V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kideny
V2EX  ›  编程

讨论下 function 这个单词的翻译

  •  
  •   kideny · 2016-08-12 12:45:33 +08:00 · 8011 次点击
    这是一个创建于 3007 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天在群里有人问,软件开发中的函数和数学中的函数除了名字一样,还有啥一样的地方嘛?

    某人回答:除了名字一样,没啥一样的了。

    于是乎,我就去查了一下 function 这个单词的意思。

    function 这个单词,可以被翻译为,功能,作用,函数等多重意思。

    感觉在编程中,被翻译成功能块或者代码块,更合适。

    直接叫函数,感觉有点不恰当呢。

    这是不是, IT 行业的翻译害人系列呢?

    71 条回复    2016-08-13 14:52:58 +08:00
    ynyounuo
        1
    ynyounuo  
       2016-08-12 12:50:57 +08:00
    GordianZ
        2
    GordianZ  
    MOD
       2016-08-12 12:51:24 +08:00
    为什么不是函数呢?
    y=sin(x) 跟 var result = print("hello") 有什么区别么?
    lxrmido
        3
    lxrmido  
       2016-08-12 12:51:26 +08:00
    21grams
        4
    21grams  
       2016-08-12 12:51:55 +08:00
    软件开发中的函数和数学中的函数是有关系的,他们叫一个名字可不是什么巧合。
    bdbai
        5
    bdbai  
       2016-08-12 12:54:11 +08:00 via Android
    个人认为两个函数的相同点在于,给定输入值,通过一定计算,返回一个值。编程中函数远比“功能块”“代码块”复杂,有必要区分开。
    举个例子, Javascript 以及各种 函数式语言。
    ynyounuo
        6
    ynyounuo  
       2016-08-12 12:57:06 +08:00
    叫「代码块」稍微欠那么一点儿意思
    soland
        7
    soland  
       2016-08-12 12:57:54 +08:00
    软件开发中的函数,数学中的函数
    最终的含义是一样的。
    kideny
        8
    kideny  
    OP
       2016-08-12 13:01:35 +08:00
    @GordianZ 区别大了吧。。。
    learnshare
        9
    learnshare  
       2016-08-12 13:03:00 +08:00   ❤️ 2
    代码中,叫函数;代码功能上,叫方法;软件层面,叫功能。这不就和谐了
    bdbai
        10
    bdbai  
       2016-08-12 13:04:39 +08:00 via Android
    @kideny 没啥区别 真的
    y=sin(x) 和 Let result = Sin(input)

    骚年放下 PHP ,来玩玩函数式编程吧。
    bdbai
        11
    bdbai  
       2016-08-12 13:05:42 +08:00 via Android
    @learnshare 函数和功能不应该对应起来。不是一个层面的东西。
    hronro
        12
    hronro  
       2016-08-12 13:05:48 +08:00 via Android
    一般编程中的函数都有副作用,而数学中的函数没有。建议去看看函数式编程中 pure function 的概念
    Kisesy
        13
    Kisesy  
       2016-08-12 13:11:32 +08:00
    很多编程书里也写成子程序
    kideny
        14
    kideny  
    OP
       2016-08-12 13:22:58 +08:00
    @Kisesy 叫子程序,显然更严谨一些。
    kideny
        15
    kideny  
    OP
       2016-08-12 13:26:05 +08:00
    @bdbai 让你说的数学里的=和编程里的=,一样似的
    levn
        16
    levn  
       2016-08-12 13:30:09 +08:00
    学 haskell 喽
    learnshare
        17
    learnshare  
       2016-08-12 13:33:37 +08:00
    @bdbai 所以我分了三个层面
    BOYPT
        18
    BOYPT  
       2016-08-12 13:37:23 +08:00
    以前学 basic 就没搞清楚怎么又有 Sub 又有 Function 。
    汇编里面的函数就叫 PROC ,过程吧。
    其实啊,程序语言是数学语言的一个子集,程序函数是数学函数的子集。
    SpicyCat
        19
    SpicyCat  
       2016-08-12 13:39:26 +08:00   ❤️ 1
    在找到更好的翻译之前,还是用 「函数」 这个翻译吧。
    「功能块」 或者 「代码块」 比 「函数」 这个翻译更差。
    bdbai
        20
    bdbai  
       2016-08-12 13:40:40 +08:00 via Android
    @Kisesy VB 里的 Sub 么?
    @kideny 我们在讨论 function 而不是等号。讲真,了解点别的对你有好处。
    @learnshare 我以为你说的是一一对应的关系。
    Cee
        21
    Cee  
       2016-08-12 13:45:05 +08:00
    Like procedure vs. function
    kooze
        22
    kooze  
       2016-08-12 13:46:11 +08:00
    心里明白就好,用英文去思考。
    imn1
        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
    ----------------------------------------
    嗯,我觉得“官能”这个翻译好
    bdbai
        24
    bdbai  
       2016-08-12 14:07:09 +08:00 via Android
    @imn1 匿名官能、回调官能....
    zhaohui318
        25
    zhaohui318  
       2016-08-12 14:12:17 +08:00
    类似的还有 map
    kideny
        26
    kideny  
    OP
       2016-08-12 14:47:45 +08:00
    @bdbai 我是在跟你讨论 function 的中文翻译,而不是讨论 function 这个单词。参与讨论前,请先看清楚再说话。
    kideny
        27
    kideny  
    OP
       2016-08-12 14:53:16 +08:00
    数学里的函数,等号左右两边是相等的吧;
    程序里把 function 赋值给变量,仅仅是赋值,那是=号嘛?
    因为 function 可以赋值给变量,写法跟数学函数一样用等号,
    就说编程的 function 跟数学函数是一个意思,这是典型的偷换概念吧。
    kideny
        28
    kideny  
    OP
       2016-08-12 14:56:40 +08:00
    再说了,变量可以赋值任何东西,跟数学的函数有毛关系?
    bdbai
        29
    bdbai  
       2016-08-12 15:00:37 +08:00
    @kideny 我的观点是“函数”这一翻译没有问题,而“代码块”欠妥。
    kideny
        30
    kideny  
    OP
       2016-08-12 15:06:22 +08:00
    @bdbai 你可以自己定义下,什么叫函数了。
    czheo
        31
    czheo  
       2016-08-12 15:06:32 +08:00   ❤️ 2
    那 block 翻译成什么
    kideny
        32
    kideny  
    OP
       2016-08-12 15:09:00 +08:00
    @czheo 你这样问没意思,一词多意多了去了。
    不能因为可以在别的地方叫一个意思,就在所有地方都这样叫。
    就跟小姐是一个意思。
    kideny
        33
    kideny  
    OP
       2016-08-12 15:12:12 +08:00
    @czheo 一个英文单词应该翻译成什么,肯定跟他用在什么地方有关。 function 这个词,最早在数学里翻译过来,也是叫方程式的,也不是叫函数的。
    慢慢也不知道怎么搞的,数学里开始叫函数,编程里也叫函数。
    鬼知道,这个函数是什么鬼啊。
    但是你跟老外说 function ,大家都知道。
    就像你跟外国人说小姐是鸡,他肯定傻逼半天。
    trcnkq
        34
    trcnkq  
       2016-08-12 15:31:43 +08:00
    数学里“函数”本来也叫“映射”: input -> output
    只是很多很常见的计算机语言语言允许让函数有*副作用*,于是成了: <input, 之前的 env> -> <output, 之后的 env>,然而本质还是“映射”。
    函数式语言推崇让函数不产生副作用,返璞归真,回到它原始的含义。
    levn
        35
    levn  
       2016-08-12 15:35:12 +08:00   ❤️ 1
    @kideny
    应该说,外国人在编程术语里使用 function 这个词的时候,指的就是和数学函数相关的那个意思。而不是什么“功能”的意思。毕竟最开始搞这些的都是搞学术的,最开始也是用来计算的。
    那时候应该还没有应用软件工程师这种玩意儿吧。
    cxbig
        36
    cxbig  
       2016-08-12 15:36:54 +08:00   ❤️ 1
    看看维基百科 https://zh.wikipedia.org/wiki/函数
    图片已经很简明了,函数就是输入一个参数,得到一个结果。这和 function 在各程序语言里的功能是一样的。
    kideny
        37
    kideny  
    OP
       2016-08-12 15:47:22 +08:00
    @trcnkq function 这个单词,是清末传入中国的。最早叫方程式,你确定那时候的数学家是想表达映射的意思?
    @cxbig 维基百科里第一行是:本文介绍的是数学中的函数。关于计算机领域的函数,详见“子程序”。
    SuperMild
        38
    SuperMild  
       2016-08-12 16:01:21 +08:00 via iPhone
    中文书面语是表意文字,把表音的外语翻译过来时是有先天问题的,怎么译都是错的,同时怎么译都是对的,以前人们外语水平不高不得不硬套汉字,现在的新出现的单词基本上都直接用英文了,这是趋势。

    对于过去的单词,我认为要么沿用旧译法,真不想用,也别创造新译法了,直接用英语单词就好。
    cxbig
        39
    cxbig  
       2016-08-12 16:01:53 +08:00
    @kideny 那你有没有点过去看一下?
    - 子程式( subroutine )是一個概括性的術語
    - 函数( function ),又稱函式,是一種子程式,利用函数名稱,可以接收回傳值。
    kideny
        40
    kideny  
    OP
       2016-08-12 16:03:20 +08:00
    @SuperMild 说的很中肯, github 上很多国人的项目,都直接用英文写注释,很给力啊。
    kideny
        41
    kideny  
    OP
       2016-08-12 16:04:14 +08:00
    @cxbig 你赶紧去维基百科提交 bug ,别让函数跳转到子程序啦。
    cxbig
        42
    cxbig  
       2016-08-12 16:21:39 +08:00
    @kideny 明白了,你的观点是根本不认同“函数”这个中文翻译,尽管大多数中文资料都是沿用这个名字。
    那么你喜欢用英文原文随便你咯。
    我认识的懂中文的欧洲朋友对“函数”这个中文名字没有任何理解或沟通上的障碍。
    chairuosen
        43
    chairuosen  
       2016-08-12 16:23:16 +08:00
    sin(x)是函数 y=sin(x)是函数表达式

    所以单讲函数,是没区别的
    tairan2006
        44
    tairan2006  
       2016-08-12 17:47:28 +08:00
    用函数没啥问题,特别是 haskell (手动滑稽)

    如果是功能块,那高阶函数怎么翻译?
    qdzzyb
        45
    qdzzyb  
       2016-08-12 18:00:20 +08:00
    就叫它 坑
    menc
        46
    menc  
       2016-08-12 18:01:32 +08:00
    @kideny

    你写数学证明的时候就没写过

    “令 h = xxx ” ?
    sharpy
        47
    sharpy  
       2016-08-12 18:21:48 +08:00
    h = h + 1
    hcwhan
        48
    hcwhan  
       2016-08-12 18:27:23 +08:00 via Android
    主要差异点 是副作用
    czheo
        49
    czheo  
       2016-08-12 18:53:04 +08:00   ❤️ 1
    lz 有上过大学么?方程是 equation 好不好, function 在数学里的严谨定义一直都是集合的映射。不是说 function 里面有个 f 和 c 就是方程了。
    Death
        50
    Death  
       2016-08-12 20:30:23 +08:00 via Android
    “函数”是一类“关系”,所以并没有什么问题
    ooonme
        51
    ooonme  
       2016-08-12 20:42:27 +08:00 via iPhone
    function vs method
    ovear
        52
    ovear  
       2016-08-12 21:24:12 +08:00 via Android
    输入输出模型,冯诺依曼体系。。函数这翻译很贴切呀,没用到输入输出的,用的是 side effect 副作用。。
    hinkal
        53
    hinkal  
       2016-08-12 21:54:14 +08:00
    楼主没上过大学+1 。简直莫名其妙, 英语里数学函数和软件函数也是一个单词,要怪也不能怪翻译人员,而是怪该英文术语的发明者。况且这两次关系密切。误人子弟的是你那群里的某人吧。譬如就误了楼主你来这发帖
    wuxinli1025
        54
    wuxinli1025  
       2016-08-12 23:43:52 +08:00
    功能(function)=方法(method)
    不喜欢被叫函数, 但是感觉函数是最准确的翻译, 好纠结。
    aprikyblue
        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
    Rothschild
        56
    Rothschild  
       2016-08-13 05:05:57 +08:00
    ls 培训班出来的越说越暴露自己知识水平啊
    paulagent
        57
    paulagent  
       2016-08-13 05:36:48 +08:00
    没必要为了翻译问题吵架,计算机出现的晚,很多概念当初都是有别的背景的人提出来的,他们当年就是从本专业里找出来个概念来套上去,等后来计算机火了,再想改已经来不及了。除非你不想向后兼容了。
    orancho
        58
    orancho  
       2016-08-13 06:04:37 +08:00
    恭喜楼主加入 bloqué豪华午餐
    ericls
        59
    ericls  
       2016-08-13 06:37:15 +08:00
    只有 functional 的 function 是 function
    其他的 function 是 subroutine

    一个 function 给定相同的输入 应该永远给相同的输出

    不用谢
    ericls
        60
    ericls  
       2016-08-13 06:37:35 +08:00
    @cxbig 不一样!!!!!!
    binux
        61
    binux  
       2016-08-13 07:20:25 +08:00
    @ericls 即使带状态转移的 function 依旧是 function
    将子程序简化为 DFA 后,状态转移函数( transition function )依旧是 function ,它的输入包括状态。给定相同的输入依然满足永远给相同的输出
    ericls
        62
    ericls  
       2016-08-13 07:37:23 +08:00 via iPhone
    @binux function 1+1=2 和 1+1 先发射一个火箭 再等于 2 是不一样的
    binux
        63
    binux  
       2016-08-13 07:42:07 +08:00
    @ericls 如果发射火箭是「状态 a 置 1 」,即按钮按下。状态转移函数:状态 a 为 0 ,输入 1 , 1 ,状态 a 置 1 ,抛出 2 。那么它就是一个 transition function 。
    newton108
        64
    newton108  
       2016-08-13 08:29:24 +08:00
    这个问题有哪怕一丁点儿的意义?
    v9ox
        65
    v9ox  
       2016-08-13 09:47:47 +08:00 via iPhone
    函数数学上把定义域映射到值域

    程序里是对逻辑的封装,把 arguments 映射成 return value

    我觉得是一回事啊
    irgil
        66
    irgil  
       2016-08-13 12:25:19 +08:00
    楼主没上过大学+1 ,代码块是 block ,有自己的定义和含义
    oska874
        67
    oska874  
       2016-08-13 12:36:27 +08:00
    离开上下文的翻译都是刷流氓。
    jiongxiaobu
        68
    jiongxiaobu  
       2016-08-13 12:44:19 +08:00 via iPhone
    一直叫它函数 因为它就是函数。
    Quaintjade
        69
    Quaintjade  
       2016-08-13 12:57:20 +08:00 via Android
    写过 VB 就知道,有 Function 和 Sub 两种东西,最大的区别在于, Function 必须有返回值, Sub 本身可以没返回值。所以 Function 就是函数,而 Sub 才更接近代码块。
    Cu635
        70
    Cu635  
       2016-08-13 14:48:24 +08:00
    @learnshare
    “方法”是面向对象程序设计的一个术语。
    Cu635
        71
    Cu635  
       2016-08-13 14:52:58 +08:00
    “函数”定义上就是一个映射,只不过咱们从初中到高中再到非数学专业通修的高等数学 /微积分里面,学到的都是从数字或者向量映射到一个数字的函数。

    如果把定义域和值域的概念都扩展,都不仅仅看作数字 /向量的集合话,不就能兼容编程当中的“函数”了?(也就是说,把那些“副作用”也看成值域的一部分,函数的参数是一个向量,值域是包括返回值和“副作用”的一系列操作组成的向量)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5491 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 73ms · UTC 08:41 · PVG 16:41 · LAX 00:41 · JFK 03:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.