V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
drymonfidelia
V2EX  ›  程序员

为什么很多人喜欢在 bool 类型变量名称开头都加个 is?在强类型语言中,这个 is 是否有些多余?

  •  
  •   drymonfidelia · 2024-12-24 15:49:01 +08:00 · 6420 次点击
    这是一个创建于 371 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第 1 条附言  ·  2024-12-24 17:14:42 +08:00
    我是想说形容词+静态类型感觉加个 is 有点多余了,像 C#默认属性很多 Enabled 这样的
    48 条回复    2024-12-26 14:38:49 +08:00
    cmdOptionKana
        1
    cmdOptionKana  
       2024-12-24 15:54:00 +08:00   ❤️ 7
    主要是因为命名是件很麻烦的事情,加上 is 可以降低与其他命名冲突的可能性,就这个优点已经值得加上了。
    factionstrue
        2
    factionstrue  
       2024-12-24 16:01:39 +08:00 via Android   ❤️ 1
    一是这个名称的本身含义,二是防止冲突。
    wu67
        3
    wu67  
       2024-12-24 16:06:31 +08:00
    不喜欢 is 你可以 if...一眼就能看出这个变量是啥啥啥呀
    windmoonwind
        4
    windmoonwind  
       2024-12-24 16:06:35 +08:00
    提高代码的可读性和维护性
    增强代码的表达力和清晰度
    cnbatch
        5
    cnbatch  
       2024-12-24 16:08:21 +08:00   ❤️ 1
    看情况,有时候我会写
    has_been_xxx
    hasBeenXXX
    can_do_xxx
    canDoXXX

    避免歧义、准确表述最重要。该用 is 时就用 is ,该用短语就用短语,没必要畏手畏脚。
    liuidetmks
        6
    liuidetmks  
       2024-12-24 16:10:08 +08:00
    看代码不一定要 ide 吧,看到 is 就知道是 bool ,一目了然
    chendy
        7
    chendy  
       2024-12-24 16:10:24 +08:00
    看个人习惯或者团队要求,统一就行,别有的有有的没
    顺便一说对于 java 来说绝对是多余的,因为访问需要走 isXxx ,再加一层就会变成 isIsXxx
    donaldturinglee
        8
    donaldturinglee  
       2024-12-24 16:11:40 +08:00
    主要是添加语义和防止冲突,不然你在做很大上下文的情况下,容易搞混
    yusf
        9
    yusf  
       2024-12-24 16:11:46 +08:00
    写 js 时候用
    shintendo
        10
    shintendo  
       2024-12-24 16:12:28 +08:00   ❤️ 1
    这是否也是一种匈牙利命名法
    penisulaS
        11
    penisulaS  
       2024-12-24 16:13:21 +08:00
    可以让代码更接近语言,我就很喜欢用很长的命名方式,尽可能描述信息
    imdong
        12
    imdong  
       2024-12-24 16:13:45 +08:00 via iPhone
    有必要,你也不想 isSetName 与 SetName 分不清谁是谁吧?

    isChild 与 child 歧义就大了。

    虽然大多时候可以通过 if(!name()) 强转判断,但有明确的类型岂不更好?
    Outshine
        13
    Outshine  
       2024-12-24 16:14:04 +08:00
    加 is 本身没有问题,有问题的是在本身语义就是布尔的名字前面加了一个 is ,比如 enable 、deleted 等
    forty
        14
    forty  
       2024-12-24 16:25:01 +08:00   ❤️ 3
    1.这是语义化、可读性的要求,有助于看名知意,否则读代码时,你需要先查看类型再思考含义?
    2.也不都是 is, 还有 can, has, -able, 等等,共同点是接近英语用词。 如:isAnimal (这里不用 is 就不能良好表达含义) isRunning, hasEmail, available, callable
    3.也有不用这些词缀也很合理的场景。如:expired, running, exists

    总之,懂点英语,就不会困惑了。
    finab
        15
    finab  
       2024-12-24 16:26:27 +08:00
    @Outshine
    isEnabled 是一个很规范的写法吧,像苹果就大量使用这种变量名
    vfs
        16
    vfs  
       2024-12-24 16:34:44 +08:00
    搜了以下代码库,有一个例子: BOOL IsClient, 不用 "Is" 的话,Client 变量歧义会不会有点儿大啊。 别人看到第一印象肯定不会认为它是一个 BOOL
    uds9u32br
        17
    uds9u32br  
       2024-12-24 16:47:20 +08:00
    isEnabled 这种形容词前面还加 is ,是否略微繁琐了一些
    写在代码里面语义个人感觉 Enabled 更舒服

    if Enabled {
    xxx
    }
    lululau
        18
    lululau  
       2024-12-24 16:48:30 +08:00
    楼主想说的:1. 强类型 -> 静态类型; 2. 形容词前面加 is

    形容词前面加 is ,确实是没必要,有的时候甚至会造成问题,比如 enabled / running ,没必要写成 isEnabled / isRunning
    Kenmin
        19
    Kenmin  
       2024-12-24 16:52:50 +08:00
    前端一些约定俗成的`boolean`变量不会加,比如`loading` `show`等。
    其他的也都会加`is` `has`之类的前后缀,即使使用的是 TypeScript 注明了类型
    adoal
        20
    adoal  
       2024-12-24 17:00:58 +08:00
    如果是形容词性的表语,不加 is 也可以清晰表达语义,但名词性的表语不加系动词基本上就是可读性的噩梦了。
    Outshine
        21
    Outshine  
       2024-12-24 17:03:57 +08:00   ❤️ 1
    @finab 那有没有可能,不规范的是苹果
    hez2010
        22
    hez2010  
       2024-12-24 17:24:10 +08:00
    IsEnabled 可以说是冗余,Enabled 就可以。
    但是 IsName 和 Name 就是完全不同的含义了。

    不过个人认为只要不是名词应该都不需要加那句多余的 Is 。
    dddd1919
        23
    dddd1919  
       2024-12-24 17:30:27 +08:00
    见名知意
    也可以 can/need/has 等等表判断语气的前缀开头,不加可能产生歧义,加上更明确,那干脆就加

    参考上古匈牙利命名法的历史
    Cruzz
        24
    Cruzz  
       2024-12-24 17:31:52 +08:00
    我一般都加一个 check 前缀,其实返回值就能区分了,你不能 isname 返回值是个 string 吧,不得事 bool 么。
    RichardPlus
        25
    RichardPlus  
       2024-12-24 17:37:43 +08:00
    多敲俩字母不费事,但能省事儿。找了一个我写的类
    [ObservableProperty] private string _Title = string.Empty;

    [ObservableProperty] private bool _HasChanged;

    [ObservableProperty] private bool _Completed;

    [ObservableProperty] private bool _CanMeasure;

    [ObservableProperty] private bool _CanSave;

    [ObservableProperty] private bool _CanRefresh;

    [ObservableProperty] private bool _IsPaged;

    [ObservableProperty] private bool _HasNextPage;

    [ObservableProperty] private bool _HasPrevPage;

    [ObservableProperty] private bool _HasTextFilter;

    [ObservableProperty] private string _Keyword = string.Empty;
    COW
        26
    COW  
       2024-12-24 17:55:16 +08:00 via Android
    建议代码里的 bool 值基本只用 is ,has ,can 这些前缀就足够了,数据库字段命名也是如此,不要用 check 这种的意义不明的前缀。另外,不要反义词,比如用 isEnabled ,不要用 isDisabled 这种。
    wjfz
        27
    wjfz  
       2024-12-24 17:58:08 +08:00
    dog.isAnimal 一看就是 bool
    dog.animal 不是很懂想表达什么

    类似的还有数据库字段命名:
    company.creator_id 一看就是 ID
    company.creator 不知道到底是 ID 还是对象

    像你说的 Enabled 这种一般不会加 is ,没必要。
    hiboshi
        28
    hiboshi  
       2024-12-24 17:59:15 +08:00
    不多于啊,我看变量 我怎么一眼就知道是 bool 类型呢
    k9982874
        29
    k9982874  
       2024-12-24 18:03:58 +08:00 via Android
    先看框架语言,如果框架语言都使用 is 那就加 is 跟框架对齐,比如 js 、c#。
    再看词性,本身就是 adj 不会引起歧义就可以考虑不加,比如 enabled ,activated 。
    shakukansp
        30
    shakukansp  
       2024-12-24 18:08:22 +08:00
    咋就冗余了,打英文 is running 和 is enabled 不都是正确用法吗
    xyooyx
        31
    xyooyx  
       2024-12-24 18:49:57 +08:00
    我记得 java 语言某些语言框架默认 boolean 的 set/get 方法使用 is 开头,导致如果错误的使用 is 开头方法反倒会出问题
    maiyasu
        32
    maiyasu  
       2024-12-24 18:52:09 +08:00   ❤️ 4
    Ruby 看着你们讨论这个笑而不语, 直接在变量后面加一个问号
    dobelee
        33
    dobelee  
       2024-12-24 18:57:52 +08:00
    1. 毫无冗余。
    2. 不加 Is 是制造歧义。
    dcsuibian
        34
    dcsuibian  
       2024-12-24 19:22:11 +08:00
    我个人觉得是冗余了,所以我不用。
    类似地,我也很少在后面加 data 或 info
    geminikingfall
        35
    geminikingfall  
       2024-12-24 20:47:30 +08:00
    个人感觉,现在加不加 is 都无所谓,反正一眼能看出来。
    F281M6Dh8DXpD1g2
        36
    F281M6Dh8DXpD1g2  
       2024-12-24 20:50:31 +08:00 via iPhone
    “这他妈谁写的狗屁!”
    “我擦我写的,三年前”
    sir283
        37
    sir283  
       2024-12-24 21:06:40 +08:00
    看个人习惯,有的喜欢直接明了就会加 is ,有的喜欢简洁一点,就会省去 is 。
    webcape233
        38
    webcape233  
       2024-12-24 21:09:18 +08:00
    ```shell
    systemctl is
    is-active -- Check whether units are active
    is-enabled -- Check whether unit files are enabled
    is-failed -- Check whether units are failed
    isolate -- Start one unit and stop all others
    is-system-running -- Query overall status of the system
    ```
    这比 bool_xxx 好多了吧
    ty29022
        39
    ty29022  
       2024-12-24 21:18:31 +08:00
    哼!语义上的那都不叫事
    上古代码还有很多这种表示类型的
    szPath
    strAddress
    dwFlags
    cbSize
    netabare
        40
    netabare  
       2024-12-25 00:19:56 +08:00
    对于 boolean 的属性,也就是类型是`bool`的变量、字段或属性,isXxx 没什么不好的,而且还能统一清晰的让人知道这个字段表达「 XXX 的状态」这个概念。

    真正有病的是某些语言里 boolean 的 getter 非要叫 isXxx ,所以禁止 boolean 属性以 is 开头这件事。
    spike76
        41
    spike76  
       2024-12-25 10:12:14 +08:00
    @maiyasu ruby 变量不能加问号, 但是定义方法可以加问号
    tsanie
        42
    tsanie  
       2024-12-25 10:44:04 +08:00
    @Outshine #21

    现在微软也这样了,xamarin.forms/maui 框架里的 BindableProperty 一水的 IsEnabled
    SuancaiFish
        43
    SuancaiFish  
       2024-12-25 11:01:24 +08:00
    @ty29022 😂😂Win32 确实是这样的,lpfnWndProc lpszClassName
    wanguorui123
        44
    wanguorui123  
       2024-12-25 14:59:52 +08:00
    is has can need
    soulflysimple123
        45
    soulflysimple123  
       2024-12-25 15:49:00 +08:00
    bool 型都命名 xxxxFlag ,某些序列化框架对 is 处理有问题
    julyclyde
        46
    julyclyde  
       2024-12-26 09:08:26 +08:00
    如果不用 is
    至少也得用过去分词形式
    SoyaDokio
        47
    SoyaDokio  
       2024-12-26 10:38:05 +08:00
    我用 Java ,不加 is ,但加 has/flag ,虽然更想加 is ,但三方库 Lombok 自动加的 setter 会导致变量映射失败。
    其实主要是想要填充语义,比如“是否是黑色”的变量名用 isBlack 就比 blackFlag 更贴切。
    drymonfidelia
        48
    drymonfidelia  
    OP
       2024-12-26 14:38:49 +08:00
    @SoyaDokio black 是形容词,我觉得不加 is 也不会有歧义
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   1044 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 18:23 · PVG 02:23 · LAX 10:23 · JFK 13:23
    ♥ Do have faith in what you're doing.