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

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

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

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

    isChild 与 child 歧义就大了。

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

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

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

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

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

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

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

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

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

    现在微软也这样了,xamarin.forms/maui 框架里的 BindableProperty 一水的 IsEnabled
    SuancaiFish
        43
    SuancaiFish  
       4 小时 27 分钟前
    @ty29022 😂😂Win32 确实是这样的,lpfnWndProc lpszClassName
    wanguorui123
        44
    wanguorui123  
       29 分钟前
    is has can need
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5361 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 07:28 · PVG 15:28 · LAX 23:28 · JFK 02:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.