1
blacklee 2015-08-18 18:08:23 +08:00 1
公司外包项目后回来的代码
服务端程序语言对方选择的是 Java MySQL 里的 bool 字段, 1 表示 false , 0 表示 true iOS 里面 各种 addSubview: 在 viewWillAppear: 里面调用 |
2
saber000 2015-08-18 18:09:28 +08:00 2
好像很好改的样子,不就是用生命来构造构造 json 数据的代码嘛?
|
3
xmoon 2015-08-18 18:09:32 +08:00
留名 看看如何搞死后来人
|
4
lucky2touch 2015-08-18 18:10:40 +08:00
StringBuffer 不简称为 sb 不砖业啊
|
6
pubby 2015-08-18 18:18:00 +08:00
一看就是不知 json 为何物,现场弄了个专用轮子,看上去思路挺流畅嘛 哈哈。不过万一各种.getName () 里面包含个 " 啥的 ......
|
7
flowfire 2015-08-18 18:34:06 +08:00
整页整页全是 onclick onclick onclick onclick onclick
。。。。。 addEventListener 真的很难么。。。 |
8
KentY 2015-08-18 19:18:31 +08:00 3
|
9
ljbha007 2015-08-18 19:40:35 +08:00 1
@KentY
重构的时候搞坏了吧 跟你们说说什么叫“刷新世界观” 我见过最经典的代码:一个 Android 的应用里有数量不定的由复杂的子视图构成的列表 子视图里好像有需要滚动的部件 当时是 android2.2 这个问题比较头疼 该程序员因为上述原因加上“数量不定” 把同样的视图在布局文件里复制了 60 多遍 并全部隐藏 然后把给视图控件赋值并取消隐藏的代码( 20 多行)也复制了 60 多遍 然后用 if else 连接起来 并且把变量名后的数字 每复制一次则递增 1 (注意:是变量名的后缀数字!不是变量的值) 如果列表元素数量大于 60 则直接不管了 整个方法长度大概 1400 来行 看完我终于明白为什么有的程序员老要加班了! 代码结构大概是这个样子: ``` public void updateList (List itemList ){ Item item0; Item item1; item0 = itemList.get (0 ); if (item0 != null ){ viewA1.setText (item0.getX ()); viewA2.setText (item0.getX ()); viewA3.setText (item0.getX ()); ... item1 = itemList.get (1 ); }else if (item1!= null ){ viewB1.setText (item1.getX ()); viewB2.setText (item1.getX ()); viewB3.setText (item1.getX ()); ... item2 = itemList.get (2 ); } // 此处省略 1400 行 } ``` |
10
hellogbk 2015-08-18 20:20:23 +08:00
其实我也一直是这么拼 JSON 的, 请问有什么现成的 API 或者库可以快速拼出来想要的 JSON 吗?
|
11
axb 2015-08-18 20:23:51 +08:00
前一阵写了一篇文章:
http://blog.2baxb.me/archives/1343 |
12
KentY 2015-08-18 20:25:43 +08:00
|
13
msg7086 2015-08-18 20:27:46 +08:00
目测这贴要火
|
14
holy_sin 2015-08-18 20:28:11 +08:00
写的犹豫不决的代码是最糟糕的,往往留下很多糟糕的注释。我的建议是既然现在的代码管理工具,那些觉得没用而注释的代码可以一律删掉。还有一点就是 api 写的不清晰。给使用者造成了很大的混淆,浪费了时间成本。
|
15
kisshere 2015-08-18 20:31:54 +08:00
if ($isLogin==true ){}
<a></table></a> |
16
holy_sin 2015-08-18 20:32:31 +08:00
还有过早优化也是问题的根源之一。不要过多的考虑未来的需求,导致代码的层次很深,最后还要跑回来删掉无用的封装逻辑。
还有一点,就是产品忙于上线,会配置很多脏数据,上线之后,再清理脏数据。这样的节奏给客户端和服务端造成了 1 + (-1 ) < 0 的效果。尽量避免脏数据。 |
20
warlock 2015-08-18 21:42:35 +08:00 via Android
applet 调用 POS 机打印小票...根本没法调试...
|
22
hcymk2 2015-08-18 21:59:37 +08:00
g (龟)son (孙)
|
23
hellogbk 2015-08-18 22:00:33 +08:00
@Troevil 啊, 我一开始没仔细看楼主发的代码,以为只是在单纯地拼 JSON ,没感觉这样做有什么大问题。刚看了一下, 原来那家伙写成那个样子了。
|
24
hellogbk 2015-08-18 22:03:05 +08:00
@KentY 没太仔细看这个文档,假如一个类里面有很多成员,根据不同的场景,需要将不同的成员组成在一起拼成 JSON ,这种情况那个东西能做吗?
|
25
KentY 2015-08-18 22:15:13 +08:00
|
26
publicID001 2015-08-18 22:43:21 +08:00 via Android
开头一本正经的写了个 RSA implementation
然而实现却是一个 xor 还不是 sbox |
28
LioMore 2015-08-18 23:37:16 +08:00
真特么操蛋
.one, .two, .three, .four, .five, .six { float: left; width: 100px; height: 40px; line-height: 40px; } .one a, .two a, .three a, .four a, .five a, .six a { display: block; text-decoration: none; color: #fff; } .one a:hover, .two a:hover, .three a:hover, .four a:hover, .five a:hover, .six a:hover { color: white; background-color: #ff7d03; } |
29
xbb7766 2015-08-19 01:01:10 +08:00 via Android
字符串查找取年月日的值。
丫开发的环境是中文系统,服务器是英文系统,上服务器测试运行时候就在这地方崩了。。。 |
32
moe3000 2015-08-19 08:40:53 +08:00
有些复杂的对象我也这么转 json 233
|
33
RagingSweet 2015-08-19 08:44:33 +08:00
你们这些代码和某四大银行核心系统的溢出判断代码相比都写的太好啦
|
34
gongpeione 2015-08-19 09:21:07 +08:00 1
看过一段这样的代码
看到上面的回复又感觉这个还好的样子了 2333 |
35
thinkmore 2015-08-19 09:49:05 +08:00
@letitbesqzr 他知道用 StringBuffer 已经很好了
|
36
geeksu 2015-08-19 09:51:33 +08:00
]
] ] ] ] ] ] ] ] return 0;] |
37
fwrq41251 2015-08-19 10:05:26 +08:00
这帖子真的不是在黑 java?
|
38
w88975 2015-08-19 11:14:41 +08:00
这是 java 还是 C# 看了半天楞是没看出来
|
40
julyclyde 2015-08-19 13:02:31 +08:00
twoChild 是啥?
|
41
miemiekurisu 2015-08-19 13:30:32 +08:00 via Android
400 行满是深度嵌套的 if else ( 20 层),考验你的视力
|
42
yxzblue 2015-08-19 13:49:55 +08:00
|
43
xiaowangge 2015-08-19 14:07:15 +08:00 1
性别字段为 : sex , int 类型,并且 0 表示男, 1 表示女 :-)
|
44
update 2015-08-19 14:18:19 +08:00
@gongpeione
这个 function zhuru (zhi ) 真是萌萌的。。 |
45
update 2015-08-19 14:18:31 +08:00
|
46
pedestrianc 2015-08-19 14:25:29 +08:00
- (void )setAudiecenModel:(QIAudienceViewCellModel *)audiecenModel {
_audiecenModel = audiecenModel; CGFloat restrictionWidth = kDeviceWidth - self.groupNameLabel.frame.origin.x - MARGIINOFCONTROLS - 20; NSDictionary* groupLevel = audiecenModel.groupLevelDict[audiecenModel.userID]; NSString* fansID = groupLevel[@"fansID"]; NSString* rankName = groupLevel[@"level"]; if (nil != rankName ) { audiecenModel.rankName = rankName; } else { rankName = audiecenModel.rankName; } NSString* rankImageName = [NSString stringWithFormat:@"group_level%ld",audiecenModel.rankName.integerValue]; if (nil == rankName ) { rankImageName = nil; } if ([_audiecenModel.anchorRank integerValue] > 0 ) { rankImageName = [NSString stringWithFormat:@"live_anchor_nobility%@",_audiecenModel.anchorRank]; } if (nil == rankName && [_audiecenModel.anchorRank integerValue] <= 0 ) { rankImageName = nil; } self.rankImageView.image = [UIImage imageNamed:rankImageName]; if (nil == audiecenModel.rankName || [audiecenModel.rankName isEqualToString:@""]) { self.rankImageViewWidthCons.constant = 11; self.groupNameLabelLeadingCons.constant = 12; } else { self.rankImageViewWidthCons.constant = 11; self.groupNameLabelLeadingCons.constant = 12; } NSString* fansGroupName = audiecenModel.groupNameDict[fansID][@"fansName"]; if (nil == rankName ) { fansGroupName = nil; } if (nil != fansGroupName ) { audiecenModel.fansGroupName = fansGroupName; } else { fansGroupName = audiecenModel.fansGroupName; } CGSize groupNameSize = [fansGroupName sizeWithFont:[UIFont systemFontOfSize:COMMONFONTSIZE]]; if (nil == audiecenModel.fansGroupName || [audiecenModel.fansGroupName isEqualToString:@""]) { self.userNameLeadingCons.constant = 0; } else { self.userNameLeadingCons.constant = MARGIINOFCONTROLS; } self.groupNameLabel.text = fansGroupName; NSString* userName = audiecenModel.userName; if ([audiecenModel.userID isEqualToString:[UserManager shareUserManager].userItem.userID]) { NSString *name = [UserManager shareUserManager].userItemDic[@"nickname"]; self.userNameLabel.text = name?name:self.userNameLabel.text; } CGSize size = [userName sizeWithFont:[UIFont systemFontOfSize:COMMONFONTSIZE]]; // wwc 过时的方法 self.userNameLabel.text = userName; NSDictionary* medalInfor = _audiecenModel.medalDict[_audiecenModel.userID]; NSString* medalImageName = nil; if ([medalInfor isKindOfClass:[NSString class]]) { medalImageName = (NSString*)medalInfor; } else { medalImageName = medalInfor[@"image"]; } [self.medalImageView sd_setImageWithURL:[NSURL URLWithString:medalImageName] placeholderImage:nil]; if (nil == medalImageName || [medalImageName isEqualToString:@""]) { self.medalLeadingCons.constant = 0; self.medalWidthCons.constant = 0; } else { self.medalLeadingCons.constant = MARGIINOFCONTROLS; self.medalWidthCons.constant = 18; } self.vestImageView.image = [UIImage imageNamed:audiecenModel.vestName]; self.nobilityImageView.image = [UIImage imageNamed:audiecenModel.nobilityName]; if (![@"noble100" isEqualToString:audiecenModel.nobilityName]) { self.nobilityImageView.hidden = NO; self.eventBgView.hidden = NO; _tap.enabled = YES; } else { _tap.enabled = NO; } if (restrictionWidth > 150 && [audiecenModel.userID isEqualToString:@"20066"]) { GGLogDebug (@"=======restrictionWidth======%f",restrictionWidth ); } if (medalImageName ) { restrictionWidth -= (self.medalWidthCons.constant + MARGIINOFCONTROLS ); } if (self.vestImageView.image ) { restrictionWidth -= (self.vestImageView.frame.size.width + MARGIINOFCONTROLS ); } if (self.nobilityImageView.image ) { restrictionWidth -= (self.nobilityImageView.frame.size.width + MARGIINOFCONTROLS ); } if (restrictionWidth < groupNameSize.width + size.width ) { self.groupNameWidthCons.constant = groupNameSize.width > restrictionWidth * LABELWIDTHRADIO ? restrictionWidth* LABELWIDTHRADIO : groupNameSize.width; self.userNameLabelWidthCons.constant = restrictionWidth - self.groupNameWidthCons.constant; } else { self.groupNameWidthCons.constant = groupNameSize.width; self.userNameLabelWidthCons.constant = size.width; } if ([audiecenModel.userID isEqualToString:@"20066"]) { GGLogDebug (@"=======restrictionWidth======%f",restrictionWidth ); } } 一个赋值方法一百多行,不建 model 数据混乱。赋值之后各种计算 layout 。。。。。同事的代码。 |
47
letitbesqzr OP @xiaowangge 哈哈 以前遇到过... 身份信息..本来只有两个 1 代表医生 0 代表居民 。。。在程序里用 true 和 false ... 后来说要加一个 管理员身份,就傻逼了。
|
48
zacard 2015-08-19 14:47:09 +08:00
糟糕代码不报错,你就谢天谢地吧。遇到不测试(甚至有编译时错误)就直接提交代码的,你哭都来不及。。。
|
49
andybest 2015-08-19 15:20:20 +08:00
|
50
aivier 2015-08-19 15:21:52 +08:00
JS 里用 JSON , C#配合 PHP 服务器端一直用 XML ,这写法也是够惊人的....
|
51
mozartgho 2015-08-19 15:42:46 +08:00
楼主,体现你 performance 的时候到了!
|
53
laucie 2015-08-19 15:52:06 +08:00
|
54
akira 2015-08-19 15:58:48 +08:00
for a:=1 to a1 do
for b:=1 to b1 do for c:=1 to c1 do for d:=1 to d1 do for e:=1 to e1 do for f:=1 to f1 do for g:=1 to g1 do for h:=1 to h1 do for i:=1 to i1 do for j:=1 to j1 do for k:=1 to k1 do for l:=1 to l1 do for m:=1 to m1 do for n:=1 to n1 do for o:=1 to o1 do for p:=1 to p1 do for q:=1 to q1 do for r:=1 to r1 do for s:=1 to s1 do for t:=1 to t1 do 我们问他,万一字母不够用怎么办 |
55
scarlex 2015-08-19 16:44:58 +08:00
@xiaowangge ...我觉得应该反过来才对啊, 0 表示女, 1 表示男...
|
57
reinhardzoe 2015-08-19 16:52:50 +08:00
坐等 "我就是那个 1 表示 girl,0 表示 boy 的程序员"
|
58
xiaowangge 2015-08-19 17:25:20 +08:00
|
59
jjed0119cs04 2015-08-19 17:28:44 +08:00
我擦。这么多人。。。
|
60
siteshen 2015-08-19 17:40:58 +08:00
#!/usr/bin/env python
# example 1 def get_something (self, a, b, get_c=True ): if get_c: c = a + b return a, b, c else return a, b # example 2 def list_users_handler (self, request ): user_ids = exec (request.params['user_ids']) |
61
wupher 2015-08-19 17:42:36 +08:00
|
62
369830973 2015-08-19 17:51:15 +08:00
楼主 GGE 的煞笔
|
63
glasslion 2015-08-19 18:07:43 +08:00
@xiaowangge 哈哈, 我见过用 1 , 2 代表性别的, 然后表里还有值为 3 , 4 的数据
|
64
wangccddaa 2015-08-19 18:11:19 +08:00
@wupher 好大一个坑啊,这个出个规范+代码 review 应该可以避免
|
65
hitsmaxft 2015-08-19 18:46:36 +08:00 via iPhone
用 velocity 拼接 json
|
67
582033 2015-08-20 10:38:12 +08:00
我没法粘贴,一个 function 3000 行!!!!
3000 行啊!!! if 又 if 让我怎么看!!! |