- 主题:重构了屎山代码
最近完成了重构某位二十年工作经验人员写的代码
其特点是特别善于使用stl,善于使用各种先进特性
主要优点有:
(1)善于使用pair, tuple,各种tuple满天飞
最长定义了一个6个字段的tuple, 各种 std::get满天飞
(2)努力认真严谨,每个函数都有返回值, 都要严格判断返回值, 各种if判断
努力写注释,比如 "//* 添加注释", 3行完成的代码能if注释到9行
(3)善于制造嵌套,努力复用变量, 一个函数七八层嵌套是常事
所有嵌套公用N个变量,这些变量在每层意思均不同
(4)善于在if, for声明中使用复杂labmda表达式,比如完成一个自定义查找算法
并且绝不换行,最长的一行代码打到378个字符
(5)善于简化if,for循环的代码行数, 循环的业务逻辑提升到if,for中
能够有效避免一屏看不清 { }对应关系
看了他的代码后,我觉得程序员秃头是有原因的
--
FROM 221.219.211.*
这么牛逼
【 在 iwantfly (雷雷) 的大作中提到: 】
: 最近完成了重构某位二十年工作经验人员写的代码
: 其特点是特别善于使用stl,善于使用各种先进特性
: 主要优点有:
: (1)善于使用pair, tuple,各种tuple满天飞
--
FROM 124.217.189.*
你倒是贴几段赏析一下
--
FROM 27.186.193.*
说不定每个人看别人的代码都是有点shi的
我觉得有点shi的,现在能忍就忍,没工夫去理
之前是发现有个类,被搞成单例,但是每个成员都是static,没忍住,把static全都去掉了。这纯粹是c++还没入门的写的,但是没人干活,还得顶上
--
修改:z16166 FROM 114.240.244.*
FROM 114.240.244.*
厉害,单例模式,你把变量都去掉static??
【 在 z16166 的大作中提到: 】
: 说不定每个人看别人的代码都是有点shi的
: 我觉得有点shi的,现在能忍就忍,没工夫去理
: 之前是发现有个类,被搞成单例,但是每个成员都是static,没忍住,把static全都去掉了。这纯粹是c++还没入门的写的,但是没人干活,还得顶上
--
FROM 223.104.39.*
bool CUSBLProcess::ReplyTransponderState(QByteArray byUSBLData)
{
bool bParseOK = false;
QString strUnpacketData = "";
if(m_DataProtocol.UnpacketData(std::move(byUSBLData), strUnpacketData))
{
QDomDocument doc;
doc.setContent(strUnpacketData);
if(!doc.isNull())
{
QDomElement elementObject = doc.documentElement();
if(!isValidReply(elementObject))
{
return false;
}
QDomNode node;
QDomNamedNodeMap AttributeNodeMap;
QDomNodeList nodeList = elementObject.elementsByTagName("SynchStatus");
if (!nodeList.isEmpty() && !(nodeList = nodeList.at(0).toElement().elementsByTagName("Job")).isEmpty())
{
node = nodeList.at(0);
if(!node.isNull() && !node.attributes().namedItem("RemoteControlEnabled").isNull() && !(nodeList = node.toElement().elementsByTagName("Objects")).isEmpty())
{
if(!(nodeList = nodeList.at(0).toElement().elementsByTagName("Object")).isEmpty())
{
AttributeNodeMap = nodeList.at(0).attributes();
if(!AttributeNodeMap.namedItem("Type").isNull() && !AttributeNodeMap.namedItem("UID").isNull() &&
!(nodeList = nodeList.at(0).toElement().elementsByTagName("Properties")).isEmpty() &&
!(node = nodeList.at(0).attributes().namedItem("State")).isNull())
{
std::string sType = AttributeNodeMap.namedItem("Type").nodeValue().trimmed().toStdString();
std::string sUID = AttributeNodeMap.namedItem("UID").nodeValue().trimmed().toStdString();
if(node.nodeValue().trimmed() == "Tracked")
{
auto itTransponder = m_mTransponder.end();
if((itTransponder = std::find_if(m_mTransponder.begin(), m_mTransponder.end(), [sType, sUID](const std::map<int32_t, std::tuple<std::string, std::string, std::string, int32_t, int32_t, std::string>>::value_type &ItemData){return std::get<0>(ItemData.second) == sType && std::get<1>(ItemData.second) == sUID;})) != m_mTransponder.end())
{
std::get<2>(itTransponder->second) = node.nodeValue().trimmed().toStdString();
}
bParseOK = true;
}
}
}
else
{
bParseOK = true;
}
}
}
}
SendUSBLDataToDisplay(doc);
}
return bParseOK;
}
【 在 pgw 的大作中提到: 】
: 你倒是贴几段赏析一下
--
FROM 221.219.211.*
我接手的项目,二年半时间换了5波人,我是第六个。
【 在 iwantfly 的大作中提到: 】
:
: 最近完成了重构某位二十年工作经验人员写的代码
: 其特点是特别善于使用stl,善于使用各种先进特性
: 主要优点有:
: (1)善于使用pair, tuple,各种tuple满天飞
#发自zSMTH-v-@OPPO PBAM00
--
FROM 223.104.42.*
是设计了一个类为单例,有getInstance()方法,然后这个类的内部成员全都是static成员,无一例外。
还有声明std::string时用""初始化的,比如std::string s = "";传递string时不用引用。这些都属于C++没入门的,可能是java阵营转过来的。
你看楼主在5楼贴的那个例子: QString strUnpacketData = "";
【 在 Maxlander 的大作中提到: 】
: 厉害,单例模式,你把变量都去掉static??
--
修改:z16166 FROM 114.240.244.*
FROM 114.240.244.*
我现在全部用early return,不过前提是所有资源必须用RAII管理。
全都是early return的话,会到处都是这种语句。还是给这种语句弄个宏不那么扎眼,但宏容易出现类型转换的隐蔽错误。返回std::optional能让编译器帮忙检查类型。
if (!xxx)
return yyy;
xml/json反序列化,还是弄个库比较好,即便是C++还没官方的反射。手写这种解析的纯粹是堆代码行数,还容易出错。
tuple正常绝大部分都应该是struct吧,不然谁记得住哪个元素在tuple中的下标
【 在 iwantfly 的大作中提到: 】
: bool CUSBLProcess::ReplyTransponderState(QByteArray byUSBLData)
: {
: bool bParseOK = false;
: ...................
--
修改:z16166 FROM 114.240.244.*
FROM 114.240.244.*
Java阵营的,既然单例了也不会遍地的static,这都不符合设计模式了。
【 在 z16166 的大作中提到: 】
: 是设计了一个类为单例,有getInstance()方法,然后这个类的内部成员全都是static成员,无一例外。
: 还有声明std::string时用""初始化的,比如std::string s = "";传递string时不用引用。这些都属于C++没入门的,可能是java阵营转过来的。
: 你看楼主在5楼贴的那个例子: QString strUnpacketData = "";
: ...................
--
FROM 114.246.225.*