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

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

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

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

    中文含义是否 xxx 最万能
    对应到英文就是 isXxx
    坑爹的事 java 规范里会自作聪明的把 isxxx 认为是布尔值,生成 getter 方法的时候去掉 is
    那只能用 are 了
    jk1030
        46
    jk1030  
       52 天前
    我一般是用 FLag
    poorcai
        47
    poorcai  
       52 天前
    @kujio #5 你确定这样命名是合法的吗?
    vate32
        48
    vate32  
       52 天前
    不明白为什么不让用的老哥可以看下这篇文章: https://www.cnkirito.moe/project-rules-2/
    yuezk
        49
    yuezk  
       52 天前
    @poorcai #47 个人推荐 #5 ,感觉添加 is 有点冗余。visible 和 selected 本身就有两个状态。类比中文就是:「可见的」和「是可见的」「已选中的」和「是已选中的」,把「是」去掉问题也不影响理解。
    pkoukk
        50
    pkoukk  
       52 天前   ❤️ 2
    一看标题就知道是坑爹的 java 。。
    其它哪个语言都没这奇怪的毛病
    maocat
        51
    maocat  
       52 天前 via iPhone
    notIs 负负得正
    TomVista
        52
    TomVista  
       52 天前
    美食供应商
    TomVista
        53
    TomVista  
       52 天前
    @TomVista 抱歉,请忽视这条
    ttys001
        54
    ttys001  
       52 天前
    beVisible
    beDeleted
    galikeoy
        55
    galikeoy  
       52 天前
    @jmjgeminix #22 血压上来了
    JamesR
        56
    JamesR  
       52 天前
    只有 Java 才有这个问题。
    moqimoqide
        57
    moqimoqide  
       52 天前 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  
       52 天前
    主要还是因为序列化的原因
    ericgui
        59
    ericgui  
       51 天前 via iPhone
    @7911364440 为什么?求解。is 就是俩普通字母而已,和 abc 有什么区别么?
    koebehshian
        60
    koebehshian  
       51 天前
    方法名用动词,属性名用名词或形容词
    hewiefsociety
        61
    hewiefsociety  
       51 天前
    用 sb:)
    opengps
        62
    opengps  
       51 天前 via Android
    ItIs
    wanguorui123
        63
    wanguorui123  
       51 天前
    can has
    liuxu
        64
    liuxu  
       51 天前
    谁要求的,让他换行吧
    liuxu
        65
    liuxu  
       51 天前
    @liuxu 我是说让他换行业,不是\n
    qbqbqbqb
        66
    qbqbqbqb  
       51 天前
    @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  
       51 天前 via iPhone
    i_s 属性名
    MonkeyJon
        68
    MonkeyJon  
       49 天前   ❤️ 1
    @wangchonglie 数据库对应 java 中的操作对象,平时叫实体,model ,pojo ,entity 等
    siweipancc
        69
    siweipancc  
       48 天前 via iPhone
    经常在 jni 代码里看到 bool_active 的写法,不过我倾向于形容词 actived
    evoluc97
        70
    evoluc97  
       47 天前
    @qbqbqbqb 其实如果实体类不用 boolean 类型
    直接用 int 的 1 和 0 表示 就可以用 is 字段开头把
    Xinghx
        71
    Xinghx  
       47 天前
    在 is 前面再加个前缀
    qbqbqbqb
        72
    qbqbqbqb  
       47 天前
    @evoluc97 也可以手写 getter 和 setter ,比如如果字段名叫 isXxx ,手写了 getIsXxx 和 setIsXxx 是没有问题的,框架能正确识别(一般的框架都是优先找 get 前缀的 getter ,找不到再找 is 前缀的 getter )。但是这样不符合规范,不好维护。
    一般大型项目开发的时候都是 IDE 自动生成符合规范的 getter/setter ,或者用 Lombok 之类的工具,这些工具会自动去掉多余的 is 导致后续容易出问题。
    alo1719
        73
    alo1719  
       47 天前
    我个人是用 if 代替 is ,例如 ifEffective 。其实最简洁易懂的是在 boolean 值后面加问号,例如 effective? (读作 effective ha?),可惜 Java Bean 里没法这样命名。
    Jtyczc
        74
    Jtyczc  
       34 天前
    我认为可以用 state 、flag
    deleted_state:[删除状态:0->未删除,1->已删除]
    enable_state:[开启状态:0->未开启,1->已开启]
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1135 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 22:28 · PVG 06:28 · LAX 14:28 · JFK 17:28
    ♥ Do have faith in what you're doing.