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

类方法返回`this`是不是一种糟糕的做法?

类方法返回this是一种常见的编程做法,但在某些情况下可能不是最佳选择。下面是对这个问题的全面回答:

类方法返回this的概念: 类方法是在类级别上定义的方法,不依赖于具体的实例对象。返回this意味着在调用该方法后,返回当前的类实例对象。这种做法可以支持链式调用,使代码更加简洁和可读。

分类: 类方法返回this可以被归类为一种链式编程(Fluent Interface)的实现方式。链式编程的特点是可以连续调用多个方法,以一种更加流畅和自然的方式构建复杂的操作序列。

优势:

  1. 可读性:类方法返回this可以使代码更加清晰和易读,特别是在方法链很长的情况下。
  2. 简洁性:通过链式调用,可以将多个操作连接在一起,减少了临时变量的使用和代码的重复性。
  3. 可扩展性:类方法返回this使得代码易于扩展,可以在现有的方法链上添加新的操作。

应用场景: 类方法返回this适用于需要进行多个连续操作的场景,例如构建复杂的查询条件、操作数据库、处理链式调用的构建器模式等。

推荐的腾讯云相关产品和产品介绍链接地址: 虽然本回答中不包含亚马逊AWS、Azure、阿里云、华为云、天翼云、GoDaddy、Namecheap、Google等品牌商,但以下是腾讯云提供的一些与云计算相关的产品,可供参考:

  1. 腾讯云云服务器(Elastic Compute Cloud, ECC):提供可扩展的计算资源,用于部署和运行应用程序。
    • 产品介绍链接:https://cloud.tencent.com/product/cvm
  • 腾讯云对象存储(Cloud Object Storage, COS):提供安全、高可用的云端数据存储服务。
    • 产品介绍链接:https://cloud.tencent.com/product/cos
  • 腾讯云人工智能(Artificial Intelligence, AI):提供一系列人工智能相关的服务和工具,如图像识别、语音识别等。
    • 产品介绍链接:https://cloud.tencent.com/product/ai
  • 腾讯云物联网(Internet of Things, IoT):提供物联网设备接入、数据管理和应用开发的解决方案。
    • 产品介绍链接:https://cloud.tencent.com/product/iotexplorer

总结: 类方法返回this是一种常见的编程做法,它在某些情况下可以提供更清晰、更简洁和更可扩展的代码实现方式。然而,具体是否使用该做法应根据实际情况进行评估和决策,考虑到代码的可读性、维护性和扩展性。腾讯云提供了多种云计算相关的产品和服务,可根据具体需求进行选择和使用。

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

相关·内容

CoCreateInstance调用返回代码0x80040154一种解决方法

同时还要在图片和视频文件顶部加上LOGO。像如下这样: ?      ...在另外一台Win7机器上测试时,缩略图中并没有出现想象中LOGO。一看日志文件,发现一直在报:CoCreateInstance()调用返回0x80040154。...那么CoCreateInstance()为啥会返回0x80040154呢?这个代码又意味着什么嗯?从网上搜索结果来看,0x80040154是表示"Class Not Registered"。...也就是说COM并没有注册,在注册表\HKEY_CLASSES_ROOT\CLSID\下面也就没有ID了。我们程序中使用了WIC组件来解码图片,那么难道是WIC组件没有注册吗?      ...而这个GUID在Windows7上是不存在(搜索注册表即可看到结果): ? ?       自然CoCreateInstance()调用就会返回0x80040154了。

2.5K100

一种自动将自定义序列化为JSON方法

最近因为项目需求,需要将一些自定义序列化为JSON,网上有很多好用第三方序列化工具,但都只能自动序列化一些基本类型,如NSNumber,NSString与NSDictionary这种,没有一种第三方工具提供直接将自定义序列化方法...(至少据我所知:),而对于这种序列化自定义需求,网上能查到方法只有将自定义手动转存为一个NSDictionary,然后再使用第三方工具来序列化。...功夫不负苦心人,一位stackoverflow上仁兄回复提醒了我,iOS中有Runtime Programming这样一种技术,通过阅读相应文档,最终我找到了解决方法。...iOSRuntime Programming中提供了一系列强大方法在运行时对进行操作,比如获取属性信息,协议信息,甚至是修改,增加,删除方法。...];会返回 @"haha" ,为了获取对应属性值,我们只要把属性名字用NSSelectorFromString()方法转换成selector,然后让这个foo来调用就可以了。

1.1K70
  • 一种能让大型数据聚快2000倍方法,真不戳

    在这里插入图片描述 二、问题分析 这个任务不算复杂,只要循环基础照片中每一个天体坐标,将其与其他照片中每个天体坐标计算距离,不超过某个阈值就认为是同一个天体,视作一,最后将每一中所有天体坐标求均值就得到了该天体坐标...事实也确实如此,在实验阶段,把每张照片数据量减小10倍,即每张照片天体坐标量为50万,用Python写出代码实现上述方法计算出11张照片结果需要时间是6.5天。...四、技术选型 方法有了,还要选择程序工具,之前实现时使用Python,不可否认Python很强大,有天文学计算现成框架,比如计算距离方法,只要调用现成库就可以轻松算出来。...但Python也有着非常严重弊端: Python中没有原生二分法方法,第三方库还要结合Pandas来完成,期间需要做一些数据转换,这些都必然会带来一些不必要开销。...B6格sort@m()函数是并行排序方法,数据量大时可以提高效率,数据有序是二分法使用前提条件。C17格select@b(…)函数是二分查找方法,也是本任务提速关键。

    44670

    Java里面cron表达式工具,验证corn表达式是不是正确,返回下一个执行时间根据给定Cron表达式

    目录 1 需求 2 实现 1 需求 前端传过来一个corn表达式,我们需要验证这个corn表达式是不是正确,还要实现根据给定Cron表达式,返回下一个执行时间 2 实现 加入依赖 <!...* * @author jing * */ public class CronUtils { /** * 返回一个布尔值代表一个给定Cron表达式有效性 *...方法 进行判断 return CronExpression.isValidExpression(cronExpression); } /** * 返回一个字符串值...(ParseException pe) { return pe.getMessage(); } } /** * 返回下一个执行时间根据给定...CronExpression cron = new CronExpression(cronExpression); // 第三方方法 获取到他下一次执行时间

    1.6K10

    并发编程-原子性

    那么你也许想到了,比较明显做法就是给这个servlet添加一个long类型field,然后每次请求都会自动加1,就像程序清单2.2UnsafeCountingFactorizer那样。...如果该计数器初始值为9,那么在一种比较糟糕情况下,每个线程都读取到了9这个值,然后各自都对9加了1,然后各自都把counter设置为了10。...现在让我们说一种最糟情况下,也是最后一种可能性:现在是12点15分,你两都已经去过了两个Starbucks,并且都在怀疑是不是对方放了鸽子。这时候你们该怎么做呢?是回到另外一个Starbucks吗?...延迟初始化目标就是直到用到时候再去初始化对象,同时要确保这个对象只被初始化一次。程序清单2.3LazyInitRace描绘了延迟初始化做法。...getInstance方法首先检查ExpensiveObject是否已经被初始化,如果存在了,那么就返回这个现存实例,否则就创建一个新实例,并把这个实例引用保留起来然后返回它,这样以后调用就可以避免重复创建了

    1.3K110

    springboot系列学习(七)JSR303数据校验 , 注解不能使用爆红解决方法,后端自动校验实体是不是合法

    我们之前在前端,会校验我们输入是不是合法,比如email,如果不是email格式那么就报错。这个是前段 验证规则,其实后端也是可以。...空检查 @Null 验证对象是否为null @NotNull 验证对象是否不为null, 无法查检长度为0字符串 @NotBlank 检查约束字符串是不是Null还有被Trim长度是否大于0,...,验证成立的话被注释元素一定是一个将来日期 @Pattern 验证 String 对象是否符合正则表达式规则,被注释元素符合制定正则表达式,regexp:正则表达式 flags: 指定 Pattern.Flag...数组,表示正则表达式相关选项。...这个约束参数是一个通过BigDecimal定义最大值字符串表示.小数存在精度 @DecimalMin 被标注值必须不小于约束中指定最小值.

    1.2K30

    Java IAQ:很少被回答问题

    但也存在一些特例,比如:不管choice值是什么,下面代码finally中语句就不会被执行。 Q:在C一个方法m中调用this.getClass()是不是永远返回C? 不。...大多数情况下,我也认为Math m = null 是一种糟糕做法,但我不认同MyStaticMethods 例子是一种“为了使用可有可无缩写(不如直接用类别层级方式进行表示)而导致缺乏面向对象风格继承做法...首先,说缩写不重要是一种旁观者想法;缩写可能是极其重要(参看这个例子来了解我是如何利用这种做法来达到理想效果)。其次,倒不如他自以为是的说这是一种糟糕面向对象风格。...对于Java来讲,你可以说这事一种糟糕风格,但是对于具有多继承机制语言来讲,我这种用法更容易被接受。...赞成观点认为:这是惯用做法。反对观点认为:很难完全猜对;会产生大量冗余代码。 2、定义可串联setter方法,因为它们会返回this。

    61920

    全面解析C#中异步编程为什么要异步过去糟糕体验一个新方式Tasks基于任务异步编程模型Async和await时间处理程序和无返回异步方法结束语

    当我们处理一些长线调用时,经常会导致界面停止响应或者IIS线程占用过多等问题,这个时候我们需要更多是用异步编程来修正这些问题,但是通常都是说起来容易做起来难,诚然异步编程相对于同步编程来说,它是一种完全不同编程思想...过去糟糕体验 最好理解这种问题方式是我们最常见一种情况:用户界面只拥有一个线程所有的工作都运行在这个线程上,客户端程序不能对用户鼠标时间做出反应,这很可能是因为应用程序正在被一个耗时操作所阻塞...上文中方法也是异步,这表示方法体会让编译器区别对待,允许其中一部分将会变成回调,并且自动创建Task作为返回类型。...只有一个async方法运行到一个await语句时,它才立即把控制权返回给调用方,然而只有当等待任务完成之后,它才会真正返回结果,这意味着你需要确保async方法代码不会做过多任务或者阻塞性能调用...时间处理程序和无返回异步方法 异步方法可以从其他异步方法使用await创建,但是异步在哪里结束?

    2.3K60

    设计模式之单例模式(一)

    把构造器声明为私有化,只有Singleton才可以调用构造器 用getInstance()方法实例化对象,并返回这个实例 再仔细看下getInstance()方法,这里需要着重描述下。...当返回值 如果没有单例模式,这里有一个代码写很小心例子,看完你肯定会感受到单例模式重要性。...巧克力工厂 上图中公司有意识地防止不好事情发生,对吧。但是,如果防不胜防,同事存在两个ChocolateBoiler实例,可能将发生很糟糕事情。...我们正在把某个设计成自己管理一个单独实例,同时也避免其他再自行产生实例。要想取得单例实例,通过单例是唯一途径 我们也提供对这个实例全局访问点:当你需要实例时,向查询,他会返回单个实例。...前面的例子利用延迟实例化方式创建单例,这种做法对资源敏感对象特别重要。 那我们来看看单例图: ? 你看吧,之前就说过,这个单例模式只有一个图,是不是很简单呢?仔细看看他吧。

    45230

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

    方法2:为要查找元素添加了上下文,在这里变为查找id为nav子元素,查找性能得到了很大提升。 方法3:使用了find方法,它速度更快,所以方法三最好。...因为ID选择器和元素选择器是原生JavaScript操作,而选择器不是,大家顺便可以看下find context 区别,find() children区别。...到目前为止,无论使用哪一种浏览器,使用ID选择器和当个选择器都是选中元素最快方式。 2.2、避免多个ID选择符 Id选择符应该是唯一,所以没有必要添加额外选择符。...// 糟糕$('.container > *');// 建议$('.container').children(); 2.5、选择捷径 精简代码其中一种方式是利用编码捷径。...典型做法是缓存父元素并在选择子元素时重用这些缓存元素。

    1.3K90

    「技能分享」有效处理空值10个技巧,学不会算我输

    我在某些代码库中看到一种非常糟糕做法是在简单空检查就足够了地方使用Objects方法,Optional,甚至使用Optional单独方法。...我们已经知道null不是方法最佳返回值,并且我们可以使用 Optional来指示该值可能丢失。...由于集合可以包含任意数量元素,因此它也可以包含…0个元素!在Collections中甚至有特殊emptyXxx方法返回此类集合。...字段是一种诱人案例,它不是为设计而设计,而且肯定不是必需。通过封装,您应该完全控制字段值,包括null。...这是一种固有的容易出错做法,因为关键错误可以在系统不同位置被忽略或重新出现,从而使调试变得很痛苦。因此,如果出现问题,请始终抛出异常,而不是返回null。

    1.5K30

    php代码优化技巧

    10、在包含文件时使用完整路径,解析操作系统路径所需时间会更少。   11、动辄创建全局数值是一种糟糕做法,不过有时候实际情况的确又需要这么做。...对于数据库表或数据库连接信息使用全局数值是一个不错想法,但不要在你PHP代码中频繁使用全局数值。另外,更好一种做法是把你全局变量存放在一个config.php文件中。   ...14、用@屏蔽错误消息做法非常低效。   15、尽量采用大量PHP内置函数。   16、递增一个未预定义局部变量要比递增一个预定义局部变量慢9至10倍。   ...17、派生方法运行起来要快于在基中定义同样方法。   ...此函数执行起来相当快,因为它不做任何计算,只返回zval结构(C内置数据结构,用于存储PHP变量)中存储已知字符串长度。

    2.5K50

    一个 Java 程序员眼中 Go 语言

    C、C++等等其他类似实现调用栈语言也是如此。Go 语言也差不多,除了… … 除了函数可以返回局部变量指针。这种做法在 C 语言中绝对是致命错误。...,然后返回这个函数本身,就像函数式语言一样(Go 也是一种函数式语言),所有的局部变量都将成为闭包中变量。...如果没有谨慎使用,该特性貌似一种糟糕实践。python 也这么做,perl 也是,其实是可以善用。最主要用法是返回一个值,外加 nil 或者 错误信息。...如此,将错误信息编码为无意义负值这种传统(比如 C 标准库中做法,通常返回 -1 作为错误码,非负值则表示有意义返回值),转换为一种更加可读方式。 多赋值不只用在函数上。...后一种情况下,方法可以操作结构体(此时,结构就不能被认为是一种类型,因为值类型应当是不可变)。上述方法都可以完整实现接口。

    79830

    Ian Goodfellow谈GANs论文评审:有这些迹象论文要怀疑

    ,又或者同时有很糟糕样本和很高似然,以及其它生成式模型会遇到评价指标方面的问题。...评价指标发展到现在,Frechet Inception Distance(或者它类别内版本)大概是现有方法里衡量通用 GANs 表现最好一种方法了。...以我了解,有的领域问题用以往方法从来没有解决过,然后 GANs 带来了明显提升、能生成样本了,这才是通过样本展示方法效果这种做法主要适合地方。...对于解释超参数是如何优化,说明选择这样超参数是为了优化最大值、最小值、还是多次运行之后平均值非常重要。还有一件需要注意是,针对某种好方法写出一篇糟糕论文是完全有可能。...有时候我们看到一篇论文里提出方法有很好表现,但同时文中还有很多想法是没有科学依据。后面这样做法审稿人应当尝试驳回。

    47930

    RESTful API接口设计规范与最佳实践

    而前面提到,关于实际开发出来RESTfull接口风格迥异问题实际上并没有太糟糕,为什么这么说呢?...,无法完成请求 从上面表格可以看出,HTTP码是用于标识本次请求响应结果状态,通过HTTP状态我们可以直观判断出本请求是不是成功,但是为什么有些接口设计情况是无论成功与否都只会返回200状态码呢...这两种方式区别在于,通过HTTP状态码相当于给错误码做了一个归类,这也符合真实开发场景异常处理情况。多数情况下前端在对异常做统一处理时候,同一异常往往后续处理行为是一致。...最后总结一下这个问题就是,强烈建议严格按照HTTP状态码定义区分接口响应HTTP状态码,错误码作为一种细分补充。 Part4HTTP状态码不存在,返回 200 还是 404 ?...,那么我返回结果自然是空,并不能视为一个异常,这时候返回一个200HTTP状态码,然后在响应结果里面明确结果是空才是正确做法

    1K10

    高质量jQuery代码十二条经验

    方法2,为要查找元素添加了上下文,在这里变为查找id为nav子元素,查找性能得到了很大提升。 方法3,使用了find方法,它速度更快,所以方法三最好。...因为ID选择器和元素选择器是原生JavaScript操作,而选择器不是,大家顺便可以看下find context 区别,find() children区别。...到目前为止,无论使用哪一种浏览器,使用ID选择器和当个选择器都是选中元素最快方式。 2.2、避免多个ID选择符 Id选择符应该是唯一,所以没有必要添加额外选择符。...// 糟糕 $('.container > *'); // 建议 $('.container').children(); 2.5、选择捷径 精简代码其中一种方式是利用编码捷径。...典型做法是缓存父元素并在选择子元素时重用这些缓存元素。

    1.2K40

    PHP多态极其应用

    php多态 多态,作为面向对象编程中一种设计模式,指的是通过遵循同一个interface,可以有不同功能实现(相当于说有多种形态)。...interface(广义上接口),多态里面很关键一环就是接口,广义上接口包括interface 和 abstract class 接口和抽象解释 interface interface里可以定义方法名及相应参数...,任何实现这个interface必须具体实现interface里定义所有抽象方法,一个class可以实现多个interface。...public function doThis(); public function doThat(); public function setName($name); } // 正确做法...方法接收是一个实现了Writer这个interface具体,article不再需要关注具体该用什么样格式,那已经不是它要负责了,交给背后具体Writer去处理就好了。

    29220
    领券