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

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

  •  
  •   drymonfidelia · 1 天前 · 4418 次点击
    第 1 条附言  ·  22 小时 45 分钟前
    我是想说形容词+静态类型感觉加个 is 有点多余了,像 C#默认属性很多 Enabled 这样的
    45 条回复    2024-12-25 15:49:00 +08:00
    cmdOptionKana
        1
    cmdOptionKana  
       1 天前   ❤️ 7
    主要是因为命名是件很麻烦的事情,加上 is 可以降低与其他命名冲突的可能性,就这个优点已经值得加上了。
    factionstrue
        2
    factionstrue  
       23 小时 58 分钟前 via Android   ❤️ 1
    一是这个名称的本身含义,二是防止冲突。
    wu67
        3
    wu67  
       23 小时 53 分钟前
    不喜欢 is 你可以 if...一眼就能看出这个变量是啥啥啥呀
    windmoonwind
        4
    windmoonwind  
       23 小时 53 分钟前
    提高代码的可读性和维护性
    增强代码的表达力和清晰度
    cnbatch
        5
    cnbatch  
       23 小时 51 分钟前   ❤️ 1
    看情况,有时候我会写
    has_been_xxx
    hasBeenXXX
    can_do_xxx
    canDoXXX

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

    isChild 与 child 歧义就大了。

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

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

    if Enabled {
    xxx
    }
    lululau
        18
    lululau  
       23 小时 11 分钟前
    楼主想说的:1. 强类型 -> 静态类型; 2. 形容词前面加 is

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

    不过个人认为只要不是名词应该都不需要加那句多余的 Is 。
    dddd1919
        23
    dddd1919  
       22 小时 29 分钟前
    见名知意
    也可以 can/need/has 等等表判断语气的前缀开头,不加可能产生歧义,加上更明确,那干脆就加

    参考上古匈牙利命名法的历史
    Richared
        24
    Richared  
       22 小时 28 分钟前
    我一般都加一个 check 前缀,其实返回值就能区分了,你不能 isname 返回值是个 string 吧,不得事 bool 么。
    RichardPlus
        25
    RichardPlus  
       22 小时 22 分钟前
    多敲俩字母不费事,但能省事儿。找了一个我写的类
    [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  
       22 小时 4 分钟前 via Android
    建议代码里的 bool 值基本只用 is ,has ,can 这些前缀就足够了,数据库字段命名也是如此,不要用 check 这种的意义不明的前缀。另外,不要反义词,比如用 isEnabled ,不要用 isDisabled 这种。
    wjfz
        27
    wjfz  
       22 小时 1 分钟前
    dog.isAnimal 一看就是 bool
    dog.animal 不是很懂想表达什么

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

    像你说的 Enabled 这种一般不会加 is ,没必要。
    hiboshi
        28
    hiboshi  
       22 小时 0 分钟前
    不多于啊,我看变量 我怎么一眼就知道是 bool 类型呢
    k9982874
        29
    k9982874  
       21 小时 56 分钟前 via Android
    先看框架语言,如果框架语言都使用 is 那就加 is 跟框架对齐,比如 js 、c#。
    再看词性,本身就是 adj 不会引起歧义就可以考虑不加,比如 enabled ,activated 。
    shakukansp
        30
    shakukansp  
       21 小时 51 分钟前
    咋就冗余了,打英文 is running 和 is enabled 不都是正确用法吗
    lqw3030
        31
    lqw3030  
       21 小时 10 分钟前
    我记得 java 语言某些语言框架默认 boolean 的 set/get 方法使用 is 开头,导致如果错误的使用 is 开头方法反倒会出问题
    maiyasu
        32
    maiyasu  
       21 小时 7 分钟前   ❤️ 4
    Ruby 看着你们讨论这个笑而不语, 直接在变量后面加一个问号
    dobelee
        33
    dobelee  
       21 小时 2 分钟前
    1. 毫无冗余。
    2. 不加 Is 是制造歧义。
    dcsuibian
        34
    dcsuibian  
       20 小时 37 分钟前
    我个人觉得是冗余了,所以我不用。
    类似地,我也很少在后面加 data 或 info
    tyrantZhao
        35
    tyrantZhao  
       19 小时 12 分钟前
    个人感觉,现在加不加 is 都无所谓,反正一眼能看出来。
    liprais
        36
    liprais  
       19 小时 9 分钟前 via iPhone
    “这他妈谁写的狗屁!”
    “我擦我写的,三年前”
    sir283
        37
    sir283  
       18 小时 53 分钟前
    看个人习惯,有的喜欢直接明了就会加 is ,有的喜欢简洁一点,就会省去 is 。
    webcape233
        38
    webcape233  
       18 小时 50 分钟前
    ```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  
       18 小时 41 分钟前
    哼!语义上的那都不叫事
    上古代码还有很多这种表示类型的
    szPath
    strAddress
    dwFlags
    cbSize
    netabare
        40
    netabare  
       15 小时 40 分钟前
    对于 boolean 的属性,也就是类型是`bool`的变量、字段或属性,isXxx 没什么不好的,而且还能统一清晰的让人知道这个字段表达「 XXX 的状态」这个概念。

    真正有病的是某些语言里 boolean 的 getter 非要叫 isXxx ,所以禁止 boolean 属性以 is 开头这件事。
    spike76
        41
    spike76  
       5 小时 47 分钟前
    @maiyasu ruby 变量不能加问号, 但是定义方法可以加问号
    tsanie
        42
    tsanie  
       5 小时 16 分钟前
    @Outshine #21

    现在微软也这样了,xamarin.forms/maui 框架里的 BindableProperty 一水的 IsEnabled
    SuancaiFish
        43
    SuancaiFish  
       4 小时 58 分钟前
    @ty29022 😂😂Win32 确实是这样的,lpfnWndProc lpszClassName
    wanguorui123
        44
    wanguorui123  
       1 小时 0 分钟前
    is has can need
    soulflysimple123
        45
    soulflysimple123  
       11 分钟前
    bool 型都命名 xxxxFlag ,某些序列化框架对 is 处理有问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5275 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 08:00 · PVG 16:00 · LAX 00:00 · JFK 03:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.