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

属性名不让用 is 开头,应该用什么?

  •  2
     
  •   7911364440 · 2021-11-26 14:31:32 +08:00 · 8954 次点击
    这是一个创建于 1091 天前的主题,其中的信息可能已经有所发展或是发生改变。
    74 条回复    2021-12-14 14:39:49 +08:00
    Quarter
        1
    Quarter  
       2021-11-26 14:32:17 +08:00 via iPhone
    can if able 这些?
    l1203
        2
    l1203  
       2021-11-26 14:36:11 +08:00   ❤️ 2
    谁定的规则你去问谁啊。楼上告诉你这些,等会又不让用你怎么办?
    dream4ever
        3
    dream4ever  
       2021-11-26 14:38:22 +08:00   ❤️ 6
    用 are
    2i2Re2PLMaDnghL
        4
    2i2Re2PLMaDnghL  
       2021-11-26 14:39:24 +08:00
    用 property 开头(
    kujio
        5
    kujio  
       2021-11-26 14:40:43 +08:00   ❤️ 21
    很简单,属性名后面加问号就行,
    isVisiable => visiable?
    isSelected => selected?
    ...
    wangkun025
        6
    wangkun025  
       2021-11-26 14:41:18 +08:00   ❤️ 1
    shifou_
    zjsxwc
        7
    zjsxwc  
       2021-11-26 14:42:24 +08:00
    用 be
    zcljy
        8
    zcljy  
       2021-11-26 14:43:52 +08:00   ❤️ 2
    nengxingbu_add
    newbieRenew
        9
    newbieRenew  
       2021-11-26 15:01:15 +08:00 via iPhone
    i_visible
    constexpr
        10
    constexpr  
       2021-11-26 15:02:09 +08:00 via Android
    用 was
    chendy
        11
    chendy  
       2021-11-26 15:02:31 +08:00
    把 is 去掉就完事了呗
    ReysC
        12
    ReysC  
       2021-11-26 15:02:55 +08:00   ❤️ 2
    areYourOk?
    看到说 are 的时候,突然想写这个
    7911364440
        13
    7911364440  
    OP
       2021-11-26 15:07:24 +08:00
    @l1203 is 开头的变量序列化的时候确实会有问题
    zzl22100048
        14
    zzl22100048  
       2021-11-26 15:09:18 +08:00   ❤️ 1
    为啥要 is 开头? boolean 变量用形容词
    wolfie
        15
    wolfie  
       2021-11-26 15:16:24 +08:00
    实体用 Boolean ,别用 boolean 就没这 d 事。
    earneet
        16
    earneet  
       2021-11-26 15:22:07 +08:00
    就简单把 is 去掉就行吧
    ElegantOfKing
        17
    ElegantOfKing  
       2021-11-26 15:22:15 +08:00
    checkIf
    marffin
        18
    marffin  
       2021-11-26 15:23:44 +08:00
    用 is 开头明显是布尔变量,用 b 开头就好了
    cpstar
        19
    cpstar  
       2021-11-26 15:27:36 +08:00
    burangIsXXX
    rm0gang0rf
        20
    rm0gang0rf  
       2021-11-26 15:32:20 +08:00
    是,不是
    Kimen
        21
    Kimen  
       2021-11-26 15:37:48 +08:00   ❤️ 1
    直接不加 is_deleted ,就是 deleted
    jmjgeminix
        22
    jmjgeminix  
       2021-11-26 15:39:45 +08:00   ❤️ 3
    启用拼音命名法
    IsDeleted -> 删除标志 -> scbz
    declandragon
        23
    declandragon  
       2021-11-26 15:41:05 +08:00
    cl control 的缩写,万物皆可控制。
    felixcode
        24
    felixcode  
       2021-11-26 15:44:10 +08:00
    toBeOrNotToBe
    dddd1919
        25
    dddd1919  
       2021-11-26 15:45:55 +08:00
    匈牙利命名法,bool 值统一 b 开头,b_deleted / bDeleted
    AllanAG
        26
    AllanAG  
       2021-11-26 15:48:12 +08:00
    根据语义用过 has/can
    xz410236056
        27
    xz410236056  
       2021-11-26 15:48:27 +08:00
    @kujio #5 swift 中属性跟? 有特殊含义
    cnit
        28
    cnit  
       2021-11-26 15:57:08 +08:00   ❤️ 1
    ``` xxx_flag ```
    ``` xxxFlag```
    jackmod
        29
    jackmod  
       2021-11-26 15:58:17 +08:00
    isCondtion -> conditionIsTrue (别信)
    boolean 的 getter 就是 isCondition()
    dfkjgklfdjg
        30
    dfkjgklfdjg  
       2021-11-26 15:58:18 +08:00   ❤️ 1
    直接去掉 is 不就可以了么?
    boris93
        31
    boris93  
       2021-11-26 15:59:29 +08:00 via iPhone   ❤️ 8
    isChanged -> changeLeMei
    isVisible -> visibleBu
    MonkeyJon
        32
    MonkeyJon  
       2021-11-26 16:20:53 +08:00
    is_deleted(数据库)->deleted(实体)
    murmur
        33
    murmur  
       2021-11-26 16:23:41 +08:00   ❤️ 2
    isChanged => GaiLeMe?
    isVisible => nengKanJianMe?
    isSelected => xuanZhongLeMe?
    wdwwtzy
        34
    wdwwtzy  
       2021-11-26 16:25:28 +08:00
    可以尝试以下 C#,C#允许,还有真属性....
    public bool IsXXX {get;set;}
    marcong95
        35
    marcong95  
       2021-11-26 16:29:59 +08:00
    iAmABooleanTypedPropertyForIndicatingXXXXXXX
    Kilerd
        36
    Kilerd  
       2021-11-26 16:40:35 +08:00 via iPhone
    因为 lombok 对于 boolean 生成的 getter 就是以 is 开头的,所以属性直接用形容词就好了
    5sheep
        37
    5sheep  
       2021-11-26 16:41:04 +08:00
    为啥不让用 is ,能说具体原因么。 你们用的什么语言,哪个序列化库
    wangchonglie
        38
    wangchonglie  
       2021-11-26 16:41:47 +08:00
    @MonkeyJon #32 请问这个实体应该怎么理解呢
    zhujq
        39
    zhujq  
       2021-11-26 16:42:10 +08:00
    我用 am,你用 are,is 连着他,她,它
    sunjiayao
        40
    sunjiayao  
       2021-11-26 16:59:24 +08:00
    @kujio 貌似不让包含问号。

    兄台你看我的建议如何:
    isVisiable => visiable 吗
    isSelected => selected 吗
    lyz1990
        41
    lyz1990  
       2021-11-26 17:03:54 +08:00
    为啥不能 is ?
    h82258652
        42
    h82258652  
       2021-11-26 17:13:32 +08:00
    shifouVisible
    手动狗头
    PerFectTime
        43
    PerFectTime  
       2021-11-26 17:15:46 +08:00
    凭什么
    jinhan13789991
        44
    jinhan13789991  
       2021-11-26 17:15:54 +08:00
    换成 if 开头
    isVisiable => ifVisiable
    isSelected => ifSelected
    meeop
        45
    meeop  
       2021-11-26 17:17:22 +08:00
    感觉 are 最万能
    不能用 selected 的原因:不是所有布尔变量都是一种状态 /动作,比如 isVip,变量名叫 vip 就很模糊
    不能用 has,can 的原因,不是所有布尔都在表达是否拥有 /能否的含义,例子同 isVip

    中文含义是否 xxx 最万能
    对应到英文就是 isXxx
    坑爹的事 java 规范里会自作聪明的把 isxxx 认为是布尔值,生成 getter 方法的时候去掉 is
    那只能用 are 了
    jk1030
        46
    jk1030  
       2021-11-26 17:20:07 +08:00
    我一般是用 FLag
    poorcai
        47
    poorcai  
       2021-11-26 17:30:07 +08:00
    @kujio #5 你确定这样命名是合法的吗?
    vate32
        48
    vate32  
       2021-11-26 17:36:56 +08:00
    不明白为什么不让用的老哥可以看下这篇文章: https://www.cnkirito.moe/project-rules-2/
    yuezk
        49
    yuezk  
       2021-11-26 17:38:10 +08:00
    @poorcai #47 个人推荐 #5 ,感觉添加 is 有点冗余。visible 和 selected 本身就有两个状态。类比中文就是:「可见的」和「是可见的」「已选中的」和「是已选中的」,把「是」去掉问题也不影响理解。
    pkoukk
        50
    pkoukk  
       2021-11-26 17:44:57 +08:00   ❤️ 2
    一看标题就知道是坑爹的 java 。。
    其它哪个语言都没这奇怪的毛病
    maocat
        51
    maocat  
       2021-11-26 18:18:13 +08:00 via iPhone
    notIs 负负得正
    TomVista
        52
    TomVista  
       2021-11-26 19:21:52 +08:00
    美食供应商
    TomVista
        53
    TomVista  
       2021-11-26 19:22:17 +08:00
    @TomVista 抱歉,请忽视这条
    ttys001
        54
    ttys001  
       2021-11-26 19:29:36 +08:00
    beVisible
    beDeleted
    galikeoy
        55
    galikeoy  
       2021-11-26 22:56:08 +08:00
    @jmjgeminix #22 血压上来了
    JamesR
        56
    JamesR  
       2021-11-26 23:41:20 +08:00
    只有 Java 才有这个问题。
    moqimoqide
        57
    moqimoqide  
       2021-11-27 01:23:27 +08:00 via iPhone   ❤️ 2
    布尔值命名


    给布尔变量赋子隐含“真 /假”含义的名宇

    像 done 和 success 这样的名字是很不错的布尔变量名,因为其状态要么是 true ,要么足 false:某件事情完成了或者没有完成:成功或者失败。另一方面,像 status 和 sourceFile 这样的名字却是很糟的布尔变量名,因为它们没有明确的 true 或者 false 。status 是 true 反映的是什么含义?它表明某件事情拥有一个状态吗?每件事都有状态。true 表明某件事情的状态是 OK 吗?或者说 false 表明没有任何错误吗?对于 status 这样的名字,你什么也说不出来。

    为了取得更好的效果,应该把 status 替换为类似于 error 或者 statusOK 这样的
    名字,同时把 sourceFile 替换为 sourceFileAvailable 、sourceFileFound ,或者其他能
    体现该变量所代表含义的名字。

    有些程序员喜欢在他们写的布尔变量名前加上 Is 。这样,变量名就变成了
    个问题:isdone? isError? isFound? isProcessingComplete ?用 true 或 false 回答问题
    也就为该变量给出了取值。这种方法的优点之一是它不能用于那些模糊不清的名
    字:isStatus ?这毫无意义。它的缺点之一是降低了简单逻辑表达式的可读性:if
    (isFound)的可读性要略差于 if(found).

    使用肯定的布尔变量名

    否定的名字如 notFound 、notdone 以及 notSuccessful 等较难阅读,特别是如果它们被求反:if not notFound, 这样的名字应该替换为 found 、done 或者 processingComplete ,然后再用适当的运算符求反。如果你找到了想找的结果,那么就可以用 found 而不必写双重否定的 not notFound.
    lyoe
        58
    lyoe  
       2021-11-27 03:53:15 +08:00
    主要还是因为序列化的原因
    ericgui
        59
    ericgui  
       2021-11-27 06:34:34 +08:00 via iPhone
    @7911364440 为什么?求解。is 就是俩普通字母而已,和 abc 有什么区别么?
    koebehshian
        60
    koebehshian  
       2021-11-27 10:28:37 +08:00
    方法名用动词,属性名用名词或形容词
    hewiefsociety
        61
    hewiefsociety  
       2021-11-27 13:56:20 +08:00
    用 sb:)
    opengps
        62
    opengps  
       2021-11-27 15:27:49 +08:00 via Android
    ItIs
    wanguorui123
        63
    wanguorui123  
       2021-11-27 21:32:43 +08:00
    can has
    liuxu
        64
    liuxu  
       2021-11-27 21:44:39 +08:00
    谁要求的,让他换行吧
    liuxu
        65
    liuxu  
       2021-11-27 21:49:47 +08:00
    @liuxu 我是说让他换行业,不是\n
    qbqbqbqb
        66
    qbqbqbqb  
       2021-11-27 23:54:38 +08:00
    @ericgui 和 Java 中一些序列化框架的实现有关。
    Java 里按照惯例用 getter/setter 方法读写对象属性,字段 xxx 的 getter 和 setter 应当取名为 getXxx()和 setXxx(),如果 xxx 是 boolean 类型的话 getter 应当取名为 isXxx()。
    但如果字段名称已经叫 isXxx 了,getter 总不能取名叫 isIsXxx()这种不伦不类的名字吧,于是这种情况 getter 仍然取名为 isXxx()。

    然后有些序列化框架是根据 getter 的名字反推字段名,一般情况下字段存到文件里名字都是一致的,但是如果字段名是 isXxx 的话,经过上面一番操作之后存到文件里的字段名就变成不带 is 的 xxx 了,这种不一致会给后续的开发带来麻烦。所以说属性名不能用 is 开头。

    解决方法也很简单,直接用形容词就行了,比如 isVisible ,字段名直接叫 visible 即可,一般也不影响可读性。
    7gugu
        67
    7gugu  
       2021-11-28 00:46:43 +08:00 via iPhone
    i_s 属性名
    MonkeyJon
        68
    MonkeyJon  
       2021-11-29 16:08:32 +08:00   ❤️ 1
    @wangchonglie 数据库对应 java 中的操作对象,平时叫实体,model ,pojo ,entity 等
    siweipancc
        69
    siweipancc  
       2021-11-30 11:12:59 +08:00 via iPhone
    经常在 jni 代码里看到 bool_active 的写法,不过我倾向于形容词 actived
    evoluc97
        70
    evoluc97  
       2021-12-01 10:49:40 +08:00
    @qbqbqbqb 其实如果实体类不用 boolean 类型
    直接用 int 的 1 和 0 表示 就可以用 is 字段开头把
    Xinghx
        71
    Xinghx  
       2021-12-01 11:17:59 +08:00
    在 is 前面再加个前缀
    qbqbqbqb
        72
    qbqbqbqb  
       2021-12-01 12:00:26 +08:00
    @evoluc97 也可以手写 getter 和 setter ,比如如果字段名叫 isXxx ,手写了 getIsXxx 和 setIsXxx 是没有问题的,框架能正确识别(一般的框架都是优先找 get 前缀的 getter ,找不到再找 is 前缀的 getter )。但是这样不符合规范,不好维护。
    一般大型项目开发的时候都是 IDE 自动生成符合规范的 getter/setter ,或者用 Lombok 之类的工具,这些工具会自动去掉多余的 is 导致后续容易出问题。
    alo1719
        73
    alo1719  
       2021-12-01 15:09:06 +08:00
    我个人是用 if 代替 is ,例如 ifEffective 。其实最简洁易懂的是在 boolean 值后面加问号,例如 effective? (读作 effective ha?),可惜 Java Bean 里没法这样命名。
    Jtyczc
        74
    Jtyczc  
       2021-12-14 14:39:49 +08:00
    我认为可以用 state 、flag
    deleted_state:[删除状态:0->未删除,1->已删除]
    enable_state:[开启状态:0->未开启,1->已开启]
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1050 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 22:35 · PVG 06:35 · LAX 14:35 · JFK 17:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.