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

记得有文章说, 取名字是最难的事之一, 大家有什么经验分享吗

  •  
  •   iorilu · 2023-09-10 16:22:55 +08:00 · 5959 次点击
    这是一个创建于 444 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有时候写一个函数

    函数逻辑都想好了

    但名字还没想出来

    手放在键盘上, 无从下手, 有点急躁

    毕竟知道, 名字也不能瞎凑合, 虽然现在 ide 改名字也不是什么难事

    难经常还是要为想名字耽误下

    我现在简单遵循几个原则

    1. 风格统一, 都用英文(或拼音也行, 但不能混用)
    2. 常用得名字, 都用约定俗称得, 不折腾(比如 username , 有可能有人用 user_name , 但自己应该所有项目统一)
    3. 不追求完美名字, 毕竟英文词汇有限, 用几个单词也行, 但不超过 3 个单词
    4. 统一用单数名词, 要不然有时候到底加 s 还是什么其他得变形又得想

    暂时先想到这么多, 大家可以讨论补充下

    57 条回复    2023-09-11 18:23:57 +08:00
    1map
        1
    1map  
       2023-09-10 16:55:43 +08:00
    用 chatgpt 试试
    xiaoz
        2
    xiaoz  
       2023-09-10 17:13:02 +08:00 via Android   ❤️ 1
    为此,我用 AI 写了一个工具,每次我告诉他中文,自动给我 3 个变量作为参考。见 https://asbot.imgurl.ink/userole/17
    lsry
        3
    lsry  
       2023-09-10 17:30:53 +08:00
    archxm
        4
    archxm  
       2023-09-10 17:40:38 +08:00
    主要是要避讳,不要和长辈已有的字重合。
    其他都好说,选来选去的
    cdwyd
        5
    cdwyd  
       2023-09-10 17:41:50 +08:00
    @xiaoz 开开心心的输入了汉字,满怀期待的点了按钮,然后跳出来一个登录注册的框。。。
    aulayli
        6
    aulayli  
       2023-09-10 17:48:03 +08:00   ❤️ 4
    @archxm 楼主说的是写代码时给函数起名🤣。
    MFWT
        7
    MFWT  
       2023-09-10 17:49:26 +08:00   ❤️ 1
    我一般是:

    isAdmin
    isUserLogined
    getSomething
    setSomething

    总结起来是:is/get/set/have/can 等 + 驼峰命名法的对象名

    举例就是,比如我需要一个获取用户订单号的函数,我会写:getUserOrderNumber ,尽量写明白,避免日后麻烦
    chanwang
        8
    chanwang  
       2023-09-10 18:16:49 +08:00 via Android
    找个算命的算一下缺什么,然后确定偏旁部首。再凑个好听一点的,满足您期望的文字。或者先给暂定字母,等娃要上学了再改。或者干脆搞个字典,让娃自己翻,翻两页凑俩字得了。
    taotaodaddy
        9
    taotaodaddy  
       2023-09-10 19:13:15 +08:00
    这个难题真的已经被 chatGPT 解决了
    hsfzxjy
        10
    hsfzxjy  
       2023-09-10 19:14:54 +08:00 via Android
    让我看看楼里有几个人不看正文🤣🤣🤣
    des
        11
    des  
       2023-09-10 19:15:19 +08:00   ❤️ 1
    要不试试这个,看看别人都是怎么命名的 https://i18ns.com
    stephniebuewke
        12
    stephniebuewke  
       2023-09-10 19:33:23 +08:00
    这是一个开源的利用古诗文起名的项目 https://github.com/holynova/gushi_namer
    anoninz
        13
    anoninz  
       2023-09-10 19:39:37 +08:00
    如果是个人项目,可以试试用中文命名变量和函数名。

    对于公司项目/多人协作的项目,反正我所在的公司现在对于枚举值已经可以接受中文命名了。。。
    xiaoz
        14
    xiaoz  
       2023-09-10 19:40:30 +08:00
    @cdwyd #5 ,是的,需要注册才能使用。我只是提供一个思路,其实可以自己用 AI 的 API 自己写个工具就行了。
    yaott2020
        15
    yaott2020  
       2023-09-10 19:44:29 +08:00 via Android
    #4 #8 #12 不看正文🤣
    kingjpa
        16
    kingjpa  
       2023-09-10 19:47:40 +08:00
    a1 a2 a3 a4 a5 isno isyes noyes nook isok ,咋拗口咋来
    chanwang
        17
    chanwang  
       2023-09-10 19:49:53 +08:00 via Android
    @yaott2020 通常只看标题🌚。
    更加建议取个更好一点的标题参照新闻的标题。看完标题就知道想说什么……(死鸭子嘴硬)
    xavierchow
        18
    xavierchow  
       2023-09-10 22:19:21 +08:00   ❤️ 2
    > 函数逻辑都想好了
    > 但名字还没想出来

    提供一个思路,我个人比较喜欢 top-down 的方式去写函数,而不是先去想逻辑。
    即,先试图用一句话去描述这个函数是干什么的,可以不要管怎么实现( how ),
    最好能在概括的时候思考一下函数的输入输出,只要你一句短语说的清楚的话,名字也就容易起了。

    如果先去想逻辑和具体实现的话,很容易形成一个局面,就是你最后定义函数是为了包装一堆可能
    原本不该在一个维度的逻辑代码,这时候取名字就很难了。

    换句话说,发现函数难以起名的时候,可能要思考一下是不是应该转换一下思路,做一下拆解或者合并;
    至于命名风格问题,各个语言和框架都有行业上比较成熟的惯例,加上 lint 就可以了。
    yafoo
        19
    yafoo  
       2023-09-10 22:25:05 +08:00 via Android   ❤️ 1
    以为给孩子取名呢。为了给孩子取名,焦虑了半年多
    hefish
        20
    hefish  
       2023-09-10 22:25:10 +08:00
    《代码大全》上有推荐,采用动宾结构, get_XXX, make_XXX, check_XXX ,load_XXX ,fuck_XXX ....
    followNew
        21
    followNew  
       2023-09-10 23:18:19 +08:00 via iPhone
    以函数的结果为导向,命名一个动宾短语。
    doSomething
    kneo
        22
    kneo  
       2023-09-11 00:22:00 +08:00 via Android
    取名=>命名
    vhwwls
        23
    vhwwls  
       2023-09-11 00:37:40 +08:00
    @xiaoz #2 要注册 ,劝退
    veike
        24
    veike  
       2023-09-11 01:12:28 +08:00
    @MFWT get set 加 query(从数据库查询)[狗头]
    AkiraZhao
        25
    AkiraZhao  
       2023-09-11 02:40:11 +08:00 via Android
    正好你可以看看 Stripe 的前 CEO 是如何起 Stripe 这个名字的: https://www.quora.com/How-did-Stripe-come-up-with-its-name/answer/Greg-Brockman
    leimao
        26
    leimao  
       2023-09-11 02:41:50 +08:00 via iPhone
    老外就没这烦恼,直接圣经里找
    xiamy1314
        27
    xiamy1314  
       2023-09-11 08:26:46 +08:00
    各聊各的。
    xiaoz
        28
    xiaoz  
       2023-09-11 08:52:38 +08:00 via Android
    @vhwwls #23 ,是的,需要注册才能使用。我只是提供一个思路,其实可以自己用 AI 的 API 自己写个工具就行了。
    yxzblue
        29
    yxzblue  
       2023-09-11 08:54:56 +08:00
    取名字是最难的事,那干脆别写逻辑了。光想怎么取名吧
    Befehishaber
        30
    Befehishaber  
       2023-09-11 09:23:31 +08:00
    女诗经 男楚辞
    corcre
        31
    corcre  
       2023-09-11 09:27:31 +08:00
    我也碰到过, 我们乱七八糟的数据每个系统都存一份, 不说明系统的话还要翻代码看看数据从哪里过来的, 然后不加上点条件还容易重复, 最后取数的时候就有可能变成一长串(getXXXDataFromERPBySOAndPartNo)之类的...
    encro
        32
    encro  
       2023-09-11 09:34:42 +08:00
    @MFWT

    isadmin 是方法 admin_id 是字段

    isUserLogined 是方法 last_login_at 是字段


    @iorilu

    如果遵循一个函数只干一件事情,那么名字就是反应这个事情的本质和需求。

    先写注释,让 copilot 帮你取名
    encro
        33
    encro  
       2023-09-11 09:35:33 +08:00
    这东西,最快的方法就是学习国外同类项目优秀的源码和数据库设计。
    v23xowen
        34
    v23xowen  
       2023-09-11 09:43:30 +08:00
    跨服聊天是吧
    Tengdw
        35
    Tengdw  
       2023-09-11 09:44:35 +08:00
    看看有多少人是看到帖子标题点进来不看正文直接回复的
    dif
        36
    dif  
       2023-09-11 09:50:29 +08:00
    随便区,有个关键字知道是干啥的都行,你敢信我都见过 name 也要缩写为 nme 。
    ruoxie
        37
    ruoxie  
       2023-09-11 09:51:49 +08:00
    chatgpt 啊

    {
    "filters": [
    {
    "component": "input",
    "key": "决算单状态",
    "label": "决算单状态",
    "placeholder": "请选择"
    },
    {
    "component": "input",
    "key": "主合同编号",
    "label": "主合同编号",
    "placeholder": "请输入"
    },
    {
    "component": "input",
    "key": "客户名称",
    "label": "客户名称",
    "placeholder": "请输入"
    },
    {
    "component": "input",
    "key": "客户手机号",
    "label": "客户手机号",
    "placeholder": "请输入"
    },
    {
    "component": "input",
    "key": "工程管理",
    "label": "工程管理",
    "placeholder": "请输入"
    }
    ],
    "columns": [
    {
    "slot": false,
    "title": "决算单状态",
    "dataIndex": "决算单状态",
    "key": "决算单状态"
    },
    {
    "slot": false,
    "title": "主合同编号",
    "dataIndex": "主合同编号",
    "key": "主合同编号"
    },
    {
    "slot": false,
    "title": "客户名称",
    "dataIndex": "客户名称",
    "key": "客户名称"
    },
    {
    "slot": false,
    "title": "客户手机号",
    "dataIndex": "客户手机号",
    "key": "客户手机号"
    },
    {
    "slot": false,
    "title": "房屋地址",
    "dataIndex": "房屋地址",
    "key": "房屋地址"
    },
    {
    "slot": false,
    "title": "工程管理",
    "dataIndex": "工程管理",
    "key": "工程管理"
    }
    ],
    "pagination": {
    "show": true,
    "page": "page",
    "size": "size",
    "total": "result.total"
    },
    "includeModifyModal": false,
    "fetchName": "fetchTableList",
    "result": "[\"result\"][\"records\"]",
    "serviceName": "getTableList"
    }
    ruoxie
        38
    ruoxie  
       2023-09-11 09:52:10 +08:00
    处理后

    {
    "filters": [
    {
    "component": "input",
    "key": "finalStatementStatus",
    "label": "决算单状态",
    "placeholder": "请选择"
    },
    {
    "component": "input",
    "key": "mainContractNo",
    "label": "主合同编号",
    "placeholder": "请输入"
    },
    {
    "component": "input",
    "key": "customerName",
    "label": "客户名称",
    "placeholder": "请输入"
    },
    {
    "component": "input",
    "key": "customerMobile",
    "label": "客户手机号",
    "placeholder": "请输入"
    },
    {
    "component": "input",
    "key": "projectManagement",
    "label": "工程管理",
    "placeholder": "请输入"
    }
    ],
    "columns": [
    {
    "slot": false,
    "title": "决算单状态",
    "dataIndex": "finalStatementStatus",
    "key": "finalStatementStatus"
    },
    {
    "slot": false,
    "title": "主合同编号",
    "dataIndex": "mainContractNo",
    "key": "mainContractNo"
    },
    {
    "slot": false,
    "title": "客户名称",
    "dataIndex": "customerName",
    "key": "customerName"
    },
    {
    "slot": false,
    "title": "客户手机号",
    "dataIndex": "customerMobile",
    "key": "customerMobile"
    },
    {
    "slot": false,
    "title": "房屋地址",
    "dataIndex": "houseAddress",
    "key": "houseAddress"
    },
    {
    "slot": false,
    "title": "工程管理",
    "dataIndex": "projectManagement",
    "key": "projectManagement"
    }
    ],
    "pagination": {
    "show": true,
    "page": "page",
    "size": "size",
    "total": "result.total"
    },
    "includeModifyModal": false,
    "fetchName": "fetchTableList",
    "result": "[\"result\"][\"records\"]",
    "serviceName": "getTableList"
    }
    dynastysea
        39
    dynastysea  
       2023-09-11 10:11:53 +08:00
    好听,易记,好写就行了。。有些家长装 13 ,给孩子取了巨复杂的名字,又是生僻字,又是复杂笔画,百害而无一利
    imsoso
        40
    imsoso  
       2023-09-11 10:12:43 +08:00
    哈哈,我就看看 v2 有多少是有娃的
    imsoso
        41
    imsoso  
       2023-09-11 10:12:56 +08:00
    只看标题就回复
    weilongs
        42
    weilongs  
       2023-09-11 10:16:18 +08:00
    起名字这事,按照公司规定套路避免重复、尽量说明白就好了。实在不行就 AI 给帮你吧。
    sepwolves
        43
    sepwolves  
       2023-09-11 10:19:00 +08:00
    @archxm 明显你只看标题不看全文。
    itechnology
        44
    itechnology  
       2023-09-11 10:19:48 +08:00
    #4 #8 #12 #30 是只看了个标题就来回复吧
    zhuisui
        45
    zhuisui  
       2023-09-11 10:22:33 +08:00   ❤️ 2
    起名,不给是给变量、函数还是类、模块,这件事背后反映的,是你对这里业务的了解程度和抽象程度。这是上面回答几乎所有都没有提到的部分。
    除了有个提到用 top-down 的方式去起名,这代表的是面向领域(业务)的解决方案编程(起名),是在难以做到面向领域编程时的最优选择。

    跨越这一步之后,剩下的就是用中文来生成英文了。这里的问题是,翻译会给出一些近义词,英语不好的话,就会选到含义其实不合适的词。
    比如简单的例子,declaration 和 definition ,work 、job 、task ,time 、duration 、date 、period ,size 、count 、amount 、length 之类的

    最后才是命名风格的问题,驼峰还是下划线,无所谓,这步是最细枝末节的事情。
    jatsz
        46
    jatsz  
       2023-09-11 10:28:13 +08:00   ❤️ 2
    我的经验是:以目标命令,而不是以实现命名。

    启发点是:我给公司写的一个 CI 监控和部署,我就起了 CIMonitor ,通过来监控 CI 来实现自动部署。
    后来一个同事指出其实这个 CIMonitor 真正的目的是部署,所以不如叫做 deployer 。

    从这个点,让我意识到,名字要传达目的,而不是实现(做法)。
    zackzergzeng
        47
    zackzergzeng  
       2023-09-11 10:32:20 +08:00
    github copilot 会补全名字的,有会员可以试下
    chenzw2
        48
    chenzw2  
       2023-09-11 11:07:53 +08:00
    aababc
        49
    aababc  
       2023-09-11 11:29:42 +08:00
    @jatsz 确实,很多人会把实现的细节体现在名字上
    jatsz
        50
    jatsz  
       2023-09-11 12:05:30 +08:00
    在补充一下,以目标命名的好处。
    - 传达目的,这个通常是稳定的抽象,避免 X-Y 问题。
    - 给自己的实现带来灵活性,修改实现的时候不必修改名字。
    des
        51
    des  
       2023-09-11 12:23:29 +08:00 via iPhone
    @corcre 说到这个就不得不提一下苹果的接口了,名字都是巨长无比
    MFWT
        52
    MFWT  
       2023-09-11 12:46:21 +08:00
    @veike 道理是相通的,你得看得出来这玩意在干啥,不然取名字没意义,写 aaabbb 就好
    MoYi123
        53
    MoYi123  
       2023-09-11 15:16:23 +08:00
    说明你的函数逻辑不清楚 ,需要用很长一段话才能说清楚在干什么, 建议重写.
    alleluya
        54
    alleluya  
       2023-09-11 15:38:04 +08:00
    @aulayli 我没点进来以前也以为是给人起名字...🤣
    yhm2046
        55
    yhm2046  
       2023-09-11 15:54:45 +08:00 via Android
    有一本书叫[代码大全]大部分程序员常见问题都有说明,推荐看看,很有用
    Qiss
        56
    Qiss  
       2023-09-11 16:03:08 +08:00
    确实,我家要不是祖先托梦,我想不出起啥名字
    allanpk716
        57
    allanpk716  
       2023-09-11 18:23:57 +08:00 via iPhone
    计算生辰八字五行属性的算法,非原创,只是用 C 艹 实现。我不迷信,但是给娃取名的时候我也用来玩了。https://github.com/allanpk716/BaziEval
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3442 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 11:06 · PVG 19:06 · LAX 03:06 · JFK 06:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.