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

如何用Swift重写C++ObjC代码库,并将其缩减70%

从头开始重写所有内容,也就是从轨道上起飞并摧毁整个站点,这几乎从来都不是一个好主意。遗留代码包含了当前开发人员从未经历过的数十年的艰辛教训,即使是最初的开发人员,如果他们还在的话,也早就忘记了。...彻底重写后,一切都是新的。尽管如此,在把问题隐藏了 35 年之后,我决定的最好方式依然是重新审视一切,并从头开始重写。 C++ 一直是管理大型项目复杂性的有效语言,那么我为什么还要更换语言呢?...该移植合并了许多转换: 该移植还涉及到了重构并重写核心算法,这些算法由于其功能的逐步发展而变得非常笨重了。 在过去的 18 个月里,我一直在努力重写所有这些内容。...C++ 所需的大量重复样板代码在 Swift 中消失了,只剩下表示逻辑所需的代码,使含义更加清晰了。...当我移植单独的功能部分时,Swift 源代码的大小通常是相应 C++ 代码的 30%。(虽然代码行数不是一个信息量很大的指标,但它却很容易衡量。)

91340

如何用普通的类模拟抽象类和接口?

下面这段代码是一个比较典型的抽象类的使用场景(模板设计模式)。...对应到例子代码中就是,所有继承 Logger 抽象类的子类,都必须重写 doLog() 方法。 刚刚我们讲了如何定义抽象类,现在我们再来看一下,在 Java 这种编程语言中,我们如何定义接口。...省略其他处理逻辑... } } 上面这段代码是一个比较典型的接口的使用场景。我们通过 Java 中的 interface 关键字定义了一个 Filter 接口。...在下面这段C++ 代码中,我们就用抽象类模拟了一个接口(下面这段代码实际上是策略模式中的一段代码)。...刚刚我们讲了如何用抽象类来模拟接口,以及如何用普通类来模拟接口,那如何用普通类来模拟抽象类呢?这个问题留给你自己思考,你可以留言说说你的实现方法。

1.2K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    回调在java和js中的对比和应用及其背后思想

    Test public void test4() throws InterruptedException { printA(); printB(); } 这段代码的输出值则是...后面我分析了js中的回调和java中的回调,这里其实还有一个触发点,就是我在看安卓代码的时候才发现了这个问题: //这段代码是在android的关机流程中的一个调用 mWindowManagerFuncs.shutdown...这里用到了java中的回调机制,那么是如何用到的,怎么体现出来的 为什么代码要这么设计,或者说为什么需要这个接口WindowManagerFuncs,关于接口的功能,我之前总结过,那么这里是抽象出功能么...向上转型是对A的对象的方法的扩充,即A的对象可访问B从A中继承来的和B“重写”A的方法。...总结 课外 接口回调非常类似上转型对象调用子类重写的方法 这句话要如何理解?

    63510

    零代码编程:用ChatGPT对PDF文件标题进行重命名

    : 836720 但是个别是这样的: 1-1-1证券简称:华维设计证券代码:833427 证券简称:吉林碳谷 证券代码:836077 这就导致重命名时出现错误。...怎么提取证券名称,继续问ChatGPT: “””证券简称: 吉冈精密 证券代码: 836720 但是个别是这样的: 1-1-1证券简称:华维设计证券代码:833427 证券简称:吉林碳谷 证券代码:836077...””” 以上是多个PDF文件的第一页内容,我想从中提取出华维设计、吉林碳谷、吉冈精密这些字符,该如何用Python来实现?...第一个匹配组,匹配任意字符,采用非贪心匹配 # \s* 匹配0个或多个空格 # 证券代码 匹配字面文本“证券代码” 这段代码使用正则表达式匹配文本中介于“证券简称:”和“证券代码”之间的证券简称,采用非贪心匹配...根据这个正则表达式,重写ChatGPT提示词: 写一段Python程序: F:盘的“北交所招股说明书”文件夹中有很多个PDF文件,读取这些PDF文件的第一页内容;使用正则表达式pattern = re.compile

    16010

    爬虫万金油,一鹅在手,抓遍全球

    每个网站都需要你做不同的处理,而且网站一旦改版,你的代码也得跟着更新。 第一点没什么捷径可走,套路见得多了,也就有经验了。...python-goose 是用 Python 重写的版本。 有了这个库,你从网上爬下来的网页可以直接获取正文内容,无需再用 bs4 或正则表达式一个个去处理文本。...以我之前发过的一篇文章 如何用Python抓抖音上的小姐姐 为抓取目标来做个演示。...Goose 虽然方便,但并不能保证每个网站都能精确获取,因此适合大规模文章的采集,如热点追踪、舆情分析等。它只能从概率上保证大多数网站可以相对准确地抓取。...homework/goose/' + title + '.txt', 'w') as f: f.write(content) except: pass 这段程序所做的事情就是

    88620

    从零开始学设计模式(1):基础编程模式

    但是在PHP编程中,你是否会遇到这样的困惑:明明是相同的需求,但是之前写的代码却并不能重用,稍微修改不满足需求,大改又会让页面变样。 是的,由于PHP什么都能干,但是高度灵活性降低了代码的结构性。...假设你需要在页面上显示不同的用户类型,如电脑用户、手机用户等,那么你可以将“显示”这件事抽象为一个类,如: 将这段代码加入到你的代码中,甚至可以require或者include进去,方便调试。 流水账编程 这里列出流水账编程,并不是让你学习,而是指出何种编程不推荐使用: 这段代码并没有错,但是以后再也无法重用了,对吧?每次遇到相同问题,你都需要反复拼接。 面向过程编程 面向过程编程曾经很流行,缺点也是无法维护,例如: 这段代码同样没有错,但是时间久了,由于缺乏类的概念,showTotal在各种应用场景缺乏灵活性,你还是需要重写代码。

    1.1K70

    DeepSeek 入门指导手册——从入门到精通【2】

    正确姿势:「请用 200 字以内解释 Web3 技术,让完全不懂技术的老人能听懂」 法则 5:及时纠正 当回答不满意时: 「这个方案成本太高,请提供预算控制在 200 元以内的版本」 「请用更正式的语气重写第二段.../示例:要求展示实际案例,尤其在编写代码时。 /步骤:让 AI 分步骤指导操作流程。 /检查:帮你发现文档中的错误。 场景演练 输入:“/步骤 如何用手机拍摄人物照片”,观察分步指导。...让 AI 帮你写代码 万能模板: 语言:Python 功能:自动下载网页图片 要求: 显示下载进度条 保存到指定文件夹 执行策略: 生成代码:先让 AI 生成代码。...的未知物体自适应抓取系统研究’,创新点更明确” 文献速览: 上传 10 篇 PDF 文献后输入:“请用表格对比各文献的研究方法,按‘创新点/局限/可借鉴处’三列整理” 阶段 2:正文写作 核心技巧: 方法描述:输入:“请将这段实验步骤改写成学术被动语态...排版优化技巧 输入:将一段文字改造成适合微信公众号的排版,要求每段不超过 3 行,关键句加 emoji,添加间隔符号如“----”,重要数据用绿色字体标注。

    15811

    DeepSeek 入门指导手册——从入门到精通【2】

    详细说明」正确姿势:「请用 200 字以内解释 Web3 技术,让完全不懂技术的老人能听懂」法则 5:及时纠正当回答不满意时:「这个方案成本太高,请提供预算控制在 200 元以内的版本」「请用更正式的语气重写第二段.../示例:要求展示实际案例,尤其在编写代码时。/步骤:让 AI 分步骤指导操作流程。/检查:帮你发现文档中的错误。场景演练输入:“/步骤 如何用手机拍摄人物照片”,观察分步指导。...让 AI 帮你写代码万能模板:语言:Python功能:自动下载网页图片要求:显示下载进度条保存到指定文件夹执行策略:生成代码:先让 AI 生成代码。添加注释:要求 AI 添加注释说明。...的未知物体自适应抓取系统研究’,创新点更明确”文献速览:上传 10 篇 PDF 文献后输入:“请用表格对比各文献的研究方法,按‘创新点/局限/可借鉴处’三列整理”阶段 2:正文写作核心技巧:方法描述:输入:“请将这段实验步骤改写成学术被动语态...排版优化技巧输入:将一段文字改造成适合微信公众号的排版,要求每段不超过 3 行,关键句加 emoji,添加间隔符号如“----”,重要数据用绿色字体标注。

    12410

    探索对象的奥秘:解析Java中的Object类,有两下子!

    :  根据如上案例代码,这里我给同学们做个解读:这段代码演示了如何为自定义类Person重写equals()和hashCode()方法,并提供了一个测试案例来验证重写的效果。...注意: 这段代码中Person类没有给出定义。...这里假设Person类重写了toString方法,提供了自定义的字符串表示。} - 结束main方法。} - 结束TestToString类。注意: 这段代码中Person类没有给出定义。...toString()是Object类的一个方法,所有的类都继承了Object类,可以重写这个方法。在这段代码中,toString()方法被重写了,返回一个字符串,其中包含了对象的属性x和y的值。  ...在这段代码中,toString()方法被重写了,返回一个字符串,其中包含了对象的属性x和y的值。

    20031

    PyTorch 揭秘 :构建MNIST数据集

    看这段代码: python import torch import torch.nn as nn import torch.optim as optim # 定义一个简单的线性模型 model = nn.Linear...从论坛到GitHub,从学术研究到工业应用,无数的开发者和研究者都在为之贡献代码,分享经验和见解。 另外,PyTorch有着丰富的生态系统。...无论是高级抽象库如torchvision用于图像处理,torchaudio为音频分析,还是与其他库的无缝对接,如ONNX用于模型导出,PyTorch都让深度学习工程师的工作变得更加简单。...火种四:实践举例 看一个实际的例子,如何用PyTorch来构建一个卷积神经网络(CNN)来识别手写数字,也就是著名的MNIST数据集: python import torch.optim as optim...running_loss = 0.0 print('Finished Training') # 保存模型参数 torch.save(net.state_dict(), 'mnist_cnn.pth') 这段代码完成了训练循环

    24610

    C#二十六 使用Ado.Net调用存储过程

    我们知道存储过程中存在输入输出参数,所以在介绍C#调用存储过程前,需要来看看系统为我们提供的参数参数对象到底有何用处以及如何使用。...我们使用参数化Sql语句重写了上面的插入操作如下: //通过连接字符串建立数据库连接 SqlConnection cn=new SqlConnection("server=....txtId.Text; cmd.ExecuteNonQuery(); } catch(SqlExecption ex) { //数据库出错报错信息 } finally { cn.Close(); } 这段代码执行后数据库里会增加两条记录...; //设置参数的名称 parId.Size=6; //设置参数数据的最大值 cmd.Parameters.Add(parId); //将参数对象加入到命令对象中 这段代码和我们上面使用的...); } catch(SqlException ex) { //数据库出错信息报告 } finally { cn.Close(); } 运行结果: 返回值:0,地址:日本广岛 在上面的这段代码中

    11110

    Python系列(七):Python 面向对象编程:类与对象的奥秘

    ,这篇文章深入讲解 Python 如何用贪心算法解决最优装载问题,贪心算法解最优装载,思路、实现、分析及优缺点俱全下面来开始我今天的正文...类和对象Python 是面向对象的编程语言,类和对象是其核心概念...对象是类的实例,如 person1 = Person("John", 30) 就创建了一个 Person 类的对象 person1,然后可调用对象的方法 person1.say_hello()。...__balance这里 __balance 是私有属性,只能通过类内部的方法间接访问和修改,提高了代码的安全性和可维护性。继承继承允许从现有类创建新类,复用现有类的属性和方法。...animal in animals: print(animal.name + " says " + animal.make_sound())Dog 类和 Cat 类继承自 Animal 类,并重写了...面向对象编程使代码更具模块化、可维护性和扩展性,适用于复杂项目的开发。

    8800

    高质量C++编程补充条款

    条款:避免长短语句无规律交错 下面这段代码无规律的交错着,容易给人以混乱的感觉: void reset_current_message(bool finish); void free_current_message...下面这段代码充分利用了这一特性,对类的定义进行了归类,使得整个定义显得较为清爽不凌乱交错: class CSender: public net::CTcpClient {    public: // 公有函数...SOL_SOCKET, SO_ERROR, &errcode, &errcode_length)) { close(fd); return errno; } set_fd(fd); return 0; } 上面这段代码...goto总是应当只作为最后不得已的一种选择,通过下面这段代码我们来看看如何使用do...while(false)优雅的解决这个问题: int CTcpClient::timed_connect() {...条款:利用typedef增强代码的自注释 在一些开源和C++标准库stl中,可以见到大量的typedef使用,除了使用typedef来简化长类型的定义,如:typedef basic_string string

    41320

    网络研讨会视频:重构还是重写?聊聊 Java 代码臭味与重构技巧

    本次网路研讨会特别邀请到 Odd-e 敏捷教练张博超(Jackson)为大家演示如何用 IntelliJ IDEA 的重构功能来改善 Java 代码臭味。...重构与重写的差别又是什么?简单地说,重构就是在不改变外部行为的情况下,调整代码使其结构更合理或提升可读性。可是这样听起来,重写也能有一样的效果?...所以张博超鼓励大家平时就可以重构,并不需要刻意找一个时间来做,千万不要等到代码真的无法维护时才重写。 問答 Q....对老系统利用新的语言特性进行重构时会产生难以调和的矛盾,如 Lambda Function 中无法优雅的 Exception Handling,请教老师如何解决这样的问题呢?...使用新语言更像是重写的范畴,因为你并不是在演进设计,而是在做一个很难撤消的技术决定。所以会建议将老系统拆分成小块的独立组件,以不会影响到主体的前提小规模的导入,这样在实现在会比较容易些。

    72110

    想要搞定正则验证字串符?用这个办法最简单,质量还高!

    正则表达式可以在许多编程语言中使用,如 Python、Java、JavaScript 等。本文我们主要探讨如何用 Java 实现正则验证字串符。...regex, str);// System.out.println(isValid);// 输出结果:例如,通过正则表达式"\\d+"验证字符串"12345",结果为:true// 则输出结果为:true以上这段代码定义了一个名为...需要注意的是这段代码是由飞算 SoFlu 软件机器人推出的Java函数AI生成器 ——FuncGPT (慧函数)生成。也就是说这是一个通过 AI 技术自动生成的代码示例。...而这样一个秒级生成的代码示例能否帮助开发人员直接应用到实际工作中,代码的质量如何?...我们将代码键入到文心一言,要求其评价以上代码,给到的反馈是,这是一个质量较高,具有良好的可读性、可维护性和健壮性的代码。结语正则验证字串符可以帮助程序员在处理字符串时轻松进行复杂匹配。

    20310
    领券