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

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

  •  
  •   iorilu · 230 天前 · 5450 次点击
    这是一个创建于 230 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有时候写一个函数

    函数逻辑都想好了

    但名字还没想出来

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

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

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

    我现在简单遵循几个原则

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

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

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

    isAdmin
    isUserLogined
    getSomething
    setSomething

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

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

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

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

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

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

    isadmin 是方法 admin_id 是字段

    isUserLogined 是方法 last_login_at 是字段


    @iorilu

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

    先写注释,让 copilot 帮你取名
    encro
        33
    encro  
       229 天前
    这东西,最快的方法就是学习国外同类项目优秀的源码和数据库设计。
    v23xowen
        34
    v23xowen  
       229 天前
    跨服聊天是吧
    Tengdw
        35
    Tengdw  
       229 天前
    看看有多少人是看到帖子标题点进来不看正文直接回复的
    dif
        36
    dif  
       229 天前
    随便区,有个关键字知道是干啥的都行,你敢信我都见过 name 也要缩写为 nme 。
    ruoxie
        37
    ruoxie  
       229 天前
    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  
       229 天前
    处理后

    {
    "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  
       229 天前
    好听,易记,好写就行了。。有些家长装 13 ,给孩子取了巨复杂的名字,又是生僻字,又是复杂笔画,百害而无一利
    imsoso
        40
    imsoso  
       229 天前
    哈哈,我就看看 v2 有多少是有娃的
    imsoso
        41
    imsoso  
       229 天前
    只看标题就回复
    weilongs
        42
    weilongs  
       229 天前
    起名字这事,按照公司规定套路避免重复、尽量说明白就好了。实在不行就 AI 给帮你吧。
    sepwolves
        43
    sepwolves  
       229 天前
    @archxm 明显你只看标题不看全文。
    itechnology
        44
    itechnology  
       229 天前
    #4 #8 #12 #30 是只看了个标题就来回复吧
    zhuisui
        45
    zhuisui  
       229 天前   ❤️ 2
    起名,不给是给变量、函数还是类、模块,这件事背后反映的,是你对这里业务的了解程度和抽象程度。这是上面回答几乎所有都没有提到的部分。
    除了有个提到用 top-down 的方式去起名,这代表的是面向领域(业务)的解决方案编程(起名),是在难以做到面向领域编程时的最优选择。

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

    最后才是命名风格的问题,驼峰还是下划线,无所谓,这步是最细枝末节的事情。
    jatsz
        46
    jatsz  
       229 天前   ❤️ 2
    我的经验是:以目标命令,而不是以实现命名。

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

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