首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用“?”是一种糟糕的做法。在方法名中?

在编程中,方法名中使用"?"通常不是一个好的做法,因为这违反了清晰和一致性的原则。以下是关于这个问题的详细解释:

基础概念

在许多编程语言中,"?"通常用作条件运算符或表示可选参数。例如,在C#和Kotlin中,"?"用于表示可空类型或条件表达式。

相关优势

  • 清晰性:方法名应该清晰地表达其功能,而不应该引起混淆。
  • 一致性:遵循一致的命名约定有助于代码的可读性和维护性。

类型

  • 条件运算符:在某些语言中,"?"用作条件运算符,例如C#中的bool ? value_if_true : value_if_false
  • 可空类型:在Kotlin中,"?"用于表示可空类型,例如String?表示一个可能为空的字符串。

应用场景

  • 条件表达式:在需要根据条件返回不同值时使用。
  • 可空类型:在需要处理可能为空的值时使用。

问题原因

在方法名中使用"?"可能会导致以下问题:

  1. 混淆:读者可能会误解方法名的含义,不清楚"?"的具体作用。
  2. 不一致:如果团队中没有统一的命名约定,可能会导致代码风格不一致。
  3. 功能不明确:方法名应该清晰地表达其功能,而"?"可能会使方法名变得模糊。

解决方法

  1. 避免使用"?":尽量使用清晰、明确的方法名,避免使用"?"。
  2. 统一命名约定:制定并遵循统一的命名约定,确保代码风格一致。
  3. 使用注释:如果方法名中必须包含特殊字符,可以在方法名旁边添加注释,解释其含义。

示例代码

以下是一个避免在方法名中使用"?"的示例:

代码语言:txt
复制
// 不好的做法
public String getUserName?() {
    // 方法实现
}

// 好的做法
public String getUserName() {
    // 方法实现
}

参考链接

通过遵循这些原则和建议,可以提高代码的可读性和维护性,避免在方法名中使用"?"带来的潜在问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

在VR中操作的Windows 系统是一种怎样的体验?

有想过在VR中操作Windows电脑系统是怎样的情景吗?...这个想法或许就快实现了,因为微软正将其操作系统的浮动3D版——Windows Holographic 带入到像HTC Vive那样的VR头显中,而这一计划最快将在明年实现。...日前,在英特尔开发者论坛上,有一个视频演示了在VR头显设备中看到的Windows系统是什么样子的。 怎么样?还不错吧!虽然虚拟房间有点乏味,但它展示了基本的理念。...不同于微软HoloLens那样狭窄的视场角,你可以在完整的视线范围内浏览整个虚拟世界。...如果你还在担心上述视频的真实性,英特尔的VR主管金·帕里斯特(Kim Pallister)已经证实了该视频中的体验内容是完全真实的。

1.3K40

什么是泛型以及在集合中泛型的使用

大家好,又见面了,我是你们的朋友全栈君。 什么是泛型? 泛型最常与集合使用,因为泛型最开始开始被加入Java就是为了解决集合向下转型一类问题的。...如果我们有这样一个需求:定义一个描述类圆,要求圆中的数据类型是不确定的,也就是声名属性的时候,属性类型是不确定的。比如描述类圆中有半径,要求半径可以用int,也可以用double。...集合中泛型的使用 List中使用泛型 在我们创建集合时使用来声明List集合只能保存Dog类对象 List dogs=new ArrayList(); 创建Dog类对象 Dog dog1...Map dogs=new HashMap(); 将dog对象保存到Map集合中 dogs.put(“111”, dog1);//此时的key只能是字符串类型,value只能是...Dog类型 总结: 在集合中使用泛型的目的就是为了解决向下转型的问题,在泛型具体化之后,集合只能存储与泛型具体化之后的类型。

2.1K20
  • 在vue中如何使用中央事件总线?vue是做什么的?

    如果将其封装成一个vue的插件,就可以在所有的组件之间任意使用而不需要导入事件总线了,是不是很方便呢?那么在vue中如何使用中央事件总线?一起来看看下文是如何介绍的。...在vue中如何使用中央事件总线?...完成之后就可以实现最简单的实际应用问题。需要注意的是,事件总线需要手动清除,否则就会一直存在,原本只需要执行一次获取的操作会存在多次操作,这个问题对于项目开发来说是比较严重的。 vue是做什么的?...上文中为大家介绍了在vue中如何使用中央事件总线的相关问题,希望能够给各位前端及开发人士提供参考。...实际上,在开发项目中并不是每一个都需要在vue中使用中央事件总线,只有当数据和业务逻辑极为复杂的情况下我们才会采用这种方式,写出来的代码也比较简洁、直观。

    2.8K20

    什么是服务网格?在微服务体系中又是如何使用的?

    Service Mesh,我们通常把他称为第三代微服务架构,既然是第三代,那么意味着他是在原来的微服务架构下做的升级。...所以,在第一代微服务架构中,每个微服务除了要实现业务逻辑以外,还需要解决上下游寻址、通讯、以及容错等问题。...在第二代微服务架构中,负责业务开发的小伙伴不仅仅需要关注业务逻辑,还需要花大量精力去处理微服务中的一些基础性配置工作,虽然 Spring Cloud 已经尽可能去完成了这些事情,但对于开发人员来说,学习...之所以我们称 Service Mesh 为服务网格,是因为在大规模微服务架构中,每个服务的通信都是由 SideCar 来代理的,各个服务之间的通信拓扑图,看起来就像一个网格形状。...不过,技术是在快速迭代的,有一句话叫“时代抛弃你的时候,连一句再见也不会说”,就像有些人在外包公司干了 10 多年再出来面试,发现很多公司要求的技术栈,他都不会。

    3.2K21

    【DB笔试面试634】在Oracle中,什么是直方图(Histogram)?直方图的使用场合有哪些?

    ♣ 题目部分 在Oracle中,什么是直方图(Histogram)?直方图的使用场合有哪些? ♣ 答案部分 直方图是CBO中的一个重点,也是一个难点部分,在面试中常常被问到。...(一)直方图的意义 在Oracle数据库中,CBO会默认认为目标列的数据在其最小值(LOW_VALUE)和最大值(HIGH_VALUE)之间是均匀分布的,并且会按照这个均匀分布原则来计算对目标列施加WHERE...但是,目标列的数据是均匀分布这个原则并不总是正确的,在实际的生产系统中,有很多表的列的数据分布是不均匀的,甚至是极度倾斜、分布极度不均衡的。...直方图是一种列的特殊的统计信息,主要用来描述列上的数据分布情况。当数据分布倾斜时,直方图可以有效地提升Cardinality评估的准确度。...如优化器对中间结果集的大小作出不正确的判断,则它可能会选择一种未达到最优化的表连接方法。因此向该列添加直方图经常会向优化器提供使用最佳连接方法所需的信息。

    1.6K50

    书写高质量jQuery代码的6条经验

    一、正确引用jQuery 尽量在body结束前才引入jQuery,而不是在head中。 借助第三方提供的CDN来引入jQuery,同时注意当使用第三方CDN出现问题时,要引入本地的jQuery文件。...到目前为止,无论使用哪一种浏览器,使用ID选择器和当个类选择器都是选中元素最快的方式。 2.2、避免多个ID选择符 Id选择符应该是唯一的,所以没有必要添加额外的选择符。...// 糟糕$('.container > *');// 建议$('.container').children(); 2.5、选择捷径 精简代码的其中一种方式是利用编码捷径。...典型做法是缓存父元素并在选择子元素时重用这些缓存元素。...在新版jQuery中,更短的 on(“click”) 用来取代类似 click() 这样的函数。

    1.3K90

    59个Python使用技巧,从此你的Python与众不同(二)

    比我在文章开始处承诺的5%还多! 12. 包管理 Python世界最棒的地方之一,就是大量的第三方程序包。同样,管理这些包也非常容易。...而如果参数默认值是和本文最开始的举例一样,是一个可变对象(Muttable),那么情况就比较糟糕了。所有函数体内对于该参数的修改,实际上都是对compile阶段就已经确定的那个对象的修改。 14....return HttpResponse(output) 可以发现,场景二和场景三中的使用方法可能会相互冲突,所以我们需要避免在使用“”作为国际化查找转换功能的代码块中同时使用“”作为临时名称。...此时,应该将它们看作是一种实现细节,在修改它们时无需对外部通知。...名称前的双下划线(如:__shahriar) 名称(具体为一个方法名)前双下划线 _ 的用法并不是一种惯例,对解释器来说它有特定的意义。Python中的这种用法是为了避免与子类定义的名称冲突。

    47210

    【python】59个Python使用技巧,从此你的Python与众不同(二)

    比我在文章开始处承诺的5%还多! 12. 包管理 Python世界最棒的地方之一,就是大量的第三方程序包。同样,管理这些包也非常容易。...而如果参数默认值是和本文最开始的举例一样,是一个可变对象(Muttable),那么情况就比较糟糕了。所有函数体内对于该参数的修改,实际上都是对compile阶段就已经确定的那个对象的修改。 14....return HttpResponse(output) 可以发现,场景二和场景三中的使用方法可能会相互冲突,所以我们需要避免在使用“”作为国际化查找转换功能的代码块中同时使用“”作为临时名称。...此时,应该将它们看作是一种实现细节,在修改它们时无需对外部通知。...名称前的双下划线(如:__shahriar) 名称(具体为一个方法名)前双下划线 _ 的用法并不是一种惯例,对解释器来说它有特定的意义。Python中的这种用法是为了避免与子类定义的名称冲突。

    42220

    【DB笔试面试400】在Oracle中,使用了如下的语句创建用户LHRLDD,则对于该用户而言,以下说法错误的是()

    题目 在Oracle中,使用了如下的语句创建用户LHRLDD,则对于该用户而言,以下说法错误的是() CREATE USER LHRLDD IDENTIFIED BY LHRLDD; A、该用户的口令为...LHRLDD B、LHRLDD的默认表空间为USERS C、LHRLDD的临时表空间为TEMP D、使用UPDATE命令可以修改LHRLDD的口令 A 答案 答案:D。...本题考察创建用户的命令。...在创建用户的时候若省略了默认表空间及临时表空间的话,则可以通过查询系统表SYS.PROPS$表来获取默认值,如下所示: SELECT * FROM PROPS$ D WHERE D.NAME IN ('...DEFAULT_TEMP_TABLESPACE', 'DEFAULT_PERMANENT_TABLESPACE'); 更改密码需要使用ALTER USER来更改,选项描述错误,所以,本题的答案为D。

    1.3K20

    高质量jQuery代码的十二条经验

    1、正确引用jQuery 尽量在body结束前才引入jQuery,而不是在head中。 借助第三方提供的CDN来引入jQuery,同时注意当使用第三方CDN出现问题时,要引入本地的jQuery文件。...到目前为止,无论使用哪一种浏览器,使用ID选择器和当个类选择器都是选中元素最快的方式。 2.2、避免多个ID选择符 Id选择符应该是唯一的,所以没有必要添加额外的选择符。...// 糟糕 $('.container > *'); // 建议 $('.container').children(); 2.5、选择捷径 精简代码的其中一种方式是利用编码捷径。...典型做法是缓存父元素并在选择子元素时重用这些缓存元素。...如在减少代码段中,如果需要根据条件从数组中得到新数组时,可以使用$.grep() 方法,如果你在使用jQuery时有自己心得的话,欢迎在留言中和大家分享!

    1.2K40

    PHP多态极其应用

    php多态 多态,作为面向对象编程中的一种设计模式,指的是通过遵循同一个interface,类可以有不同的功能实现(相当于说有多种形态)。...interface(广义上的接口),多态里面很关键的一环就是接口,广义上的接口包括interface 和 abstract class 接口和抽象类解释 interface interface里可以定义方法名及相应参数...每当你遇到大块的条件判断的时候,你就应该有所警醒,因为很可能这个时候你已经在同一个class或method下,硬要去做太多的事情了。那么这个时候,也就是该尝试多态实现了。...方法接收的是一个实现了Writer这个interface的具体类,article不再需要关注具体该用什么样的格式,那已经不是它要负责的了,交给背后具体的Writer去处理就好了。...至于怎么传一个具体的writer进去,这个就取决于你的使用情境了,比如你可以用一个factory class来这样操作: class Factory { public static function

    29320

    Spring Cloud 之 Feign.

    它还提供了一种声明式的 Web 服务客户端定义方式。  ...对于在服务提供方和服务调用方都维护一份接口定义的做法着实不提倡,原因很简单,修改了一个方法,需要同时在两个地方做出改变。...比较好的做法是:服务提供方暴露一个 xxx-interface 的 jar 包供服务调用方引用。这样,服务调用方,直接引用 xxx-interface 的方法,不维护接口定义,不关心实现。 5....timeoutinMilliseconds: 5000 # 针对某个 commandKey 做配置,而 commandKey 默认取得是客户端中的方法名作为标识。...服务降级 在 Hystrix 中服务降级我们通过 fallbackMethod 来实现,那么 Feign 中没法直接使用 @HystrixCommand 注解,要怎么配置服务降级呢?首先。

    87310

    优秀程序员共有的7种优秀编程习惯

    在大多数情况下,我们发现自己绞尽脑汁,试图了解我们撰写的意大利面条代码,或者是因为新添加的次要功能而进行了大量更改,导致产生了很多糟糕的代码。...例如,最好不要在一行中链接CSS属性 – 这会使事情变得复杂。 组织与代码结构的使用 除了更清晰的代码之外,代码的结构、组织也有助于可读性问题。...尽管在单个文件中拥有8000行以上的代码似乎很方便,但在尝试调用方法名称时,调试是一场噩梦。始终考虑变化的容易程度。 最佳做法是根据主要功能将代码分离成不同的文件,例如管理器,界面,动画,扩展等。...如果您使用CSS3编写动画效果,请避免编写jQuery动画效果,除非您有足够的理由。如果你这样做,在CSS文件中注释有关异常。 编码前的规划 在编程中,提前计划是重要的。...现在如果您的错误涉及到多个代码文件,其中有些文件被修改了多天甚至几个月前的。版本控制系统尤为重要。 在几个版本控制软件中,Git是最受欢迎的,有大量的在线帮助文档。

    45820

    优秀程序员共有的7种优秀编程习惯

    在大多数情况下,我们发现自己绞尽脑汁,试图了解我们撰写的意大利面条代码,或者是因为新添加的次要功能而进行了大量更改,导致产生了很多糟糕的代码。...例如,最好不要在一行中链接CSS属性 – 这会使事情变得复杂。 组织与代码结构的使用 除了更清晰的代码之外,代码的结构、组织也有助于可读性问题。...尽管在单个文件中拥有8000行以上的代码似乎很方便,但在尝试调用方法名称时,调试是一场噩梦。始终考虑变化的容易程度。 最佳做法是根据主要功能将代码分离成不同的文件,例如管理器,界面,动画,扩展等。...如果您使用CSS3编写动画效果,请避免编写jQuery动画效果,除非您有足够的理由。如果你这样做,在CSS文件中注释有关异常。 编码前的规划 在编程中,提前计划是重要的。...现在如果您的错误涉及到多个代码文件,其中有些文件被修改了多天甚至几个月前的。版本控制系统尤为重要。 在几个版本控制软件中,Git是最受欢迎的,有大量的在线帮助文档。

    55231

    为什么说:JavaScript 模块中的默认导出很糟糕

    在本节中,我们来看下为什么默认导出是一种糟糕的做法,会导致不好的开发体验。...为什么 subtract 是默认的,而 add 是一个命名的导出? ps:我举的例子,可能有点刻意,但随着模块的复杂,类似这种情况有常有的 考虑到开发人员使用一个他们不熟悉且复杂的模块。...记住,默认导出不是命名的导出,所以 IDE 不知道改默认导出是干嘛的,也就不会在提示的列表中显示出来: 图片 默认导出的开发体验类似于 Node 中的 CommonJS,它的开发体验也不太友好。...在命名导出中,如果哪天我们的方法名改了,那么IDE 会提示我们对应的方法不存在,我们可以更好的重构。对于默认导出,IDE 是没有反馈的。...就是在目录的根部创建一个index.js或index.ts文件,然后使用命名导出这些组件。

    87220

    面试热点|理解TCPIP传输层拥塞控制算法

    在展开拥塞控制之前我们先考虑几个问题: 如何感知拥塞 TCP连接的发送方在向对端发送数据的过程中,需要根据当前的网络状况来调整发送速率,所以感知能力很关键。...3.1 拥塞窗口cwnd 从流量控制可以知道接收方在header中给出了rwnd接收窗口大小,发送方不能自顾自地按照接收方的rwnd限制来发送数据,因为网络链路是复用的,需要考虑当前链路情况来确定数据量...笔者在rfc5681文档中也看到cwnd的定义: ? 这个解释指出了cwnd是在发送方维护的,cwnd和rwnd并不冲突,发送方需要结合rwnd和cwnd两个变量来发送数据,如图所示: ?...TCP New Reno TCP New Reno是对TCP Reno中快速恢复阶段的重传进行改善的一种改进算法,New Reno在低错误率时运行效率和选择确认SACK相当,在高错误率仍优于Reno。...快速重传是基于对网络状况没有那么糟糕的假设,因此在实际网络确实还算好的时候,快速重传还是很有用的,在很差的网络环境很多算法都很难保证效率的。

    1.3K10

    Vue之Vuex(二)

    2.使用方法   getters的使用方法和mutation一样,通过声明方法然后在方法中书写相应的代码即可并且默认的参数是state。比如当我们计算counter的平方时可以有下面两种做法。...在第一种提交风格中,count就是一个简简单单的数值,但是在第二中风格中,count是一个对象,所以我们需要通过 对象.属性名来获取具体的变量,比如本例中的 payload.count 就是获得count...1.产生原因   在mutations中, 我们定义了很多事件类型(也就是其中的方法名称)。...其中一种很常见的方案就是使用常量替代Mutation事件的类型。将这些常量放在一个单独的文件中, 方便管理以及让整个app所有的事件类型一目了然。...' //在 index.js 文件中使用常量替代方法名import { INCREATE} from '.

    72420

    Android开发笔记(七十三)代码混淆与反破解

    代码混淆 ProGuard是ADT自带的apk混淆器,它的用途有: 1、压缩apk包的大小,能删除无用的代码,并简化部分类名和方法名。...具体做法除了要在proguard-project.txt加上如下说明外,还要在java代码中调用一下js使用的方法,才能保证内部类与方法都不会被混淆。...具体说来,首先开发者在打包前记下签名证书的MD码,然后在代码中获取app安装后的签名,对比两个签名的MD值是否一致,如果不一致就退出app,这样就能防止被二次打包了。...下面是打包apk时的md5签名值的截图 ? 下面是app运行时获取到的md5签名截图 ? 花指令 代码混淆通过对类名和方法名重命名,只是加大了破解的难度,但并不能完全阻止代码被破解。...花指令(junk code)意思是程序中加入一些与业务无关的指令,希望在反汇编的时候出错,让破解者无法正确地进行反汇编工作,从而迷失方向。

    1.9K40

    代码整洁之道-读书笔记之有意义的命名

    比方说,我们在开发一种扫雷游戏,我们发现,盘面是名为theList的单元格列表,那就将其名称改为gameBoard.盘面上每个单元格都用一个简单数组表示。...误导性名称真正可怕的例子,是用小写字母1和大写字母O作为变量名,尤其是在组合使用的时候。当然,问题在于它们看起来完全像是常量“壹”和“零”。...命名一定要有意义,否则就会使代码变糟糕1.5 使用读得出来的名称不要自己造词,要使用英语单词或者短语1.6 使用可搜索的名称试图消除魔法值,将魔法值提取到常量中,常量起名一定要见明知意1.7 避免使用编码编码已经太多...给这些事取个技术性的名称,通常是最靠谱的做法。1.15 使用源自所涉问题领域的名称如果不能用程序员熟悉的术语来给手头的工作命名,就采用从所涉问题领域而来的名称吧。...说白了,你是在和自己在用的工具过不去。输入G,按下自动完成键,结果会得到系统中全部类的列表,列表恨不得有一英里那么长。这样做聪明吗?为什么要搞得IDE没法帮助你?

    515100
    领券