我在编码书中看到了以下宏定义.
#define TRUE '/'/'/'
#define FALSE '-'-'-'
Run Code Online (Sandbox Code Playgroud)
那里没有解释.
请向我解释如何将这些作为工作TRUE和FALSE.
当我问这个问题时,我几乎总是肯定是的,你应该有编码标准.
您曾被迫遵循的最奇怪的编码标准规则是什么?
而最奇怪的是,我的意思是最有趣,或者最糟糕,或者只是简单的奇怪.
在每个答案中,请提及哪种语言,您的团队规模,以及它对您和您的团队造成的影响.
我经常被要求对由真正的火箭外科医生建造的系统进行维护工作.这有很多错误,很难知道从哪里开始.
不,等等,我将从一开始就开始:在项目的早期阶段,设计师被告知系统需要扩展,他会读到可扩展性问题的根源是应用程序和数据库之间的流量服务器,所以他确保最小化这种流量.怎么样?通过将所有应用程序逻辑放在SQL Server存储过程中.
认真.大量的应用程序由HTML前端制定XML消息.当中间层接收XML消息时,它使用文档元素的标记名作为它应调用的存储过程的名称,并调用SP,将整个XML消息作为参数传递给它.它接收SP返回的XML消息并将其直接返回到前端. 应用程序层中没有其他逻辑.
(这里是在中间层验证对架构库传入的XML消息的一些代码,但我删除了,经查1后)只有消息的极少数曾与架构,2)消息实际上并没有符合对于这些模式,以及3)在验证消息之后,如果遇到任何错误,该方法将丢弃它们."这款保险丝盒可以节省时间 - 它来自工厂预装的便士!")
我以前见过那些做错事的软件.很多.我写了很多.但我从来没有见过任何像钢铁般的决心做出错误的事情,在每一个可能的转折点,这都体现在这个系统的设计和编程中.
好吧,至少他跟他所知道的一样,对吧?嗯.显然,他所知道的是Access.他并不真正理解 Access.或数据库.
以下是此代码中的常见模式:
SELECT @TestCodeID FROM TestCode WHERE TestCode = @TestCode SELECT @CountryID FROM Country WHERE CountryAbbr = @CountryAbbr SELECT Invoice.*, TestCode.*, Country.* FROM Invoice JOIN TestCode ON Invoice.TestCodeID = TestCode.ID JOIN Country ON Invoice.CountryID = Country.ID WHERE Invoice.TestCodeID = @TestCodeID AND Invoice.CountryID = @CountryID
好的.您也不信任查询优化器.但是这个怎么样?(最初,我打算在你曾经遇到过的源代码中最好的评论中发布这个内容吗?但我意识到还有更多的内容要写,而不仅仅是这一条评论,事情就失控了.)许多实用程序存储过程结束时,您将看到如下所示的代码:
-- Fix NULLs SET @TargetValue = ISNULL(@TargetValue, -9999)
是的,那段代码完全是你不能让自己相信它正在做的事情,以免你被激怒.如果变量包含NULL,则通过将其值更改为-9999来警告调用者.以下是这个数字的常用方法:
-- Get target value EXEC …
我们都知道,对我们的代码进行评论是编码风格的一个重要部分,可以使我们的代码可以理解为下一个人,或者甚至是我们在6个月左右的时间.
然而,有时评论只是没有削减芥末.我不是在谈论明显的笑话或排泄沮丧,我说的是那些似乎试图解释的评论,但这样做很差,他们可能也不会在那里.评论太短,太神秘,或者只是完全错误.
作为一个故事,你能否分享你所看到的那些真的那么糟糕的东西,如果不是很明显,请展示它所指的代码并指出它有什么问题?什么应该在那里,而不是已经走了吗?
也可以看看:
我正在使用Objective-C++为iOS编写一个大型项目.我主要使用Objective-C作为UI和其他Apple API,使用C++进行内部音频处理和其他信息处理.我想知道自由混合Objective-C和C++的缺点.
当然,混合两个对象模型有其固有的局限性以及混乱和混乱的可能性.我更好奇的是如何使用Objective-C++会影响编译过程,我可能会遇到的语法缺陷,可读性问题以及我如何避免这些,等等.我很想知道你对Objective-C++的体验有什么就像接近这个以及你可能有的提示一样.
一周前开始学习java,并决定学习使用异常的正确方法.Java真的让我很生气,因为它指定了方法可以作为其签名的一部分抛出的异常.
我目前正在尝试为客户端 - 服务器应用程序实现多线程服务器.我很惊讶事实socket.close()可以抛出IOException.问题是,如果它发生了我该怎么办?
...
final Socket socket = .... // at this point I know that I have a good socket
try {
..... // communicating with someone on that side....
} catch(IOException e) {
// communication failed
// this fact is useful, I can log it
// and will just hang up
} finally {
try {
socket.close(); // bye-bye
} catch(IOException e) {
// anything but logging I can do here?
}
}
...
Run Code Online (Sandbox Code Playgroud)
这段代码是一个单独的线程中执行,所以我 …
我一直都在使用这个术语......但我只是觉得我在这个术语背后并没有真正的指称意义(至少在这里我想讨论的术语).我对与代码相关的词感觉感兴趣,而不是拟人化的想法.我对这个与故意恶意计算有关的词(即在游戏中解锁秘密权力的黑客)的意义上也不感兴趣.我想要探索的是在编写解决问题的软件方面"破解"意味着什么
维基百科对我的'黑客'有点模糊,但是一个不错的起点.它认为是黑客
黑客的这些特征符合我对这个词的用法 - 当应用于代码时,它总是一个嘲笑的术语.在我看来,一个黑客
所有的坏,坏,坏.对我来说,这种意义上的黑客总是消极的,表明开发人员缺乏时间,无能或懒惰,尽管必须编写相当大比例的黑客来弥补设想不合理的设计或系统他们的原始设计无法"有机地"处理的要求.
我不认为我完全抓住了它 - 它有点像色情:我无法真正定义它,但是当我看到它时我知道它.所以我问你:当你试图解决软件问题时,"黑客"是什么意思?
我需要定义一个代表真实事件的类 - 比如"电影总理","派对"等.我将创建一组数据库对象来存储每个事件的数据并定义与其他数据的关系我们有(例如场地,人等).
"事件"这个词在软件环境中有不同的含义,所以我想把这个类命名为"事件"以外的东西.
关于其他名字的任何想法?
这个相关的帖子提出了一个类似的问题,但我认为所有的建议缺乏创造力 - 基本上@event,区分大小写的名称Event或使用老派命名约定CEvent.技术上很好的解决方案,但在与同行讨论数据对象时没有帮助(我的语音和听力能力不区分大小写)并且没有传达任何有关该类如何不是传统使用术语的信息.
我有这个类来启动spring-cloud配置服务器.这是一个spring-boot应用程序.
@SpringBootApplication
@EnableConfigServer
@EnableDiscoveryClient
public class ConfigServerApplication {
public static void main( String[] args ) {
SpringApplication.run( ConfigServerApplication.class, args );
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序运行正常,我所有的单元测试都很好.但是,在我们的竹子管道中,它将初始化一个声纳过程来分析代码.我们不断收到这些小警告,表明以下内容:
Utility classes should not have a public constructor
Run Code Online (Sandbox Code Playgroud)
我知道这是一个小问题,但我的任务是从代码中删除这些.
理想情况下,您可以将类标记为final并提供私有构造函数,或者所有搜索都提供解决方案.但是,Spring Configuration类不能成为final,也不能有私有构造函数.
任何想法如何解决这个问题?
spring spring-boot spring-java-config sonarqube spring-cloud
coding-style ×3
c++ ×2
naming ×2
boolean ×1
c ×1
comments ×1
definition ×1
exception ×1
function ×1
ios ×1
java ×1
macros ×1
obfuscation ×1
objective-c ×1
security ×1
sockets ×1
sonarqube ×1
spring ×1
spring-boot ×1
spring-cloud ×1