 
 |      1blacklee      2015-08-18 18:08:23 +08:00  1 公司外包项目后回来的代码 服务端程序语言对方选择的是 Java MySQL 里的 bool 字段, 1 表示 false , 0 表示 true iOS 里面 各种 addSubview: 在 viewWillAppear: 里面调用 | 
|  |      2saber000      2015-08-18 18:09:28 +08:00  2 好像很好改的样子,不就是用生命来构造构造 json 数据的代码嘛? | 
|  |      3xmoon      2015-08-18 18:09:32 +08:00 留名 看看如何搞死后来人 | 
|      4lucky2touch      2015-08-18 18:10:40 +08:00 StringBuffer 不简称为 sb 不砖业啊 | 
|  |      6pubby      2015-08-18 18:18:00 +08:00 一看就是不知 json 为何物,现场弄了个专用轮子,看上去思路挺流畅嘛 哈哈。不过万一各种.getName () 里面包含个 " 啥的 ...... | 
|  |      7flowfire      2015-08-18 18:34:06 +08:00 整页整页全是  onclick  onclick onclick onclick onclick 。。。。。 addEventListener 真的很难么。。。 | 
|  |      8KentY      2015-08-18 19:18:31 +08:00  3 | 
|  |      9ljbha007      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 行 } ``` | 
|  |      10hellogbk      2015-08-18 20:20:23 +08:00 其实我也一直是这么拼 JSON 的, 请问有什么现成的 API 或者库可以快速拼出来想要的 JSON 吗? | 
|  |      11axb      2015-08-18 20:23:51 +08:00 前一阵写了一篇文章: http://blog.2baxb.me/archives/1343 | 
|  |      12KentY      2015-08-18 20:25:43 +08:00 | 
|  |      13msg7086      2015-08-18 20:27:46 +08:00 目测这贴要火 | 
|  |      14holy_sin      2015-08-18 20:28:11 +08:00 写的犹豫不决的代码是最糟糕的,往往留下很多糟糕的注释。我的建议是既然现在的代码管理工具,那些觉得没用而注释的代码可以一律删掉。还有一点就是 api 写的不清晰。给使用者造成了很大的混淆,浪费了时间成本。 | 
|  |      15kisshere      2015-08-18 20:31:54 +08:00 if ($isLogin==true ){} <a></table></a> | 
|  |      16holy_sin      2015-08-18 20:32:31 +08:00 还有过早优化也是问题的根源之一。不要过多的考虑未来的需求,导致代码的层次很深,最后还要跑回来删掉无用的封装逻辑。 还有一点,就是产品忙于上线,会配置很多脏数据,上线之后,再清理脏数据。这样的节奏给客户端和服务端造成了 1 + (-1 ) < 0 的效果。尽量避免脏数据。 | 
|  |      20warlock      2015-08-18 21:42:35 +08:00 via Android applet 调用 POS 机打印小票...根本没法调试... | 
|      22hcymk2      2015-08-18 21:59:37 +08:00 g (龟)son (孙) | 
|  |      23hellogbk      2015-08-18 22:00:33 +08:00 @Troevil 啊, 我一开始没仔细看楼主发的代码,以为只是在单纯地拼 JSON ,没感觉这样做有什么大问题。刚看了一下, 原来那家伙写成那个样子了。 | 
|  |      24hellogbk      2015-08-18 22:03:05 +08:00 @KentY 没太仔细看这个文档,假如一个类里面有很多成员,根据不同的场景,需要将不同的成员组成在一起拼成 JSON ,这种情况那个东西能做吗? | 
|  |      25KentY      2015-08-18 22:15:13 +08:00 | 
|      26publicID001      2015-08-18 22:43:21 +08:00 via Android 开头一本正经的写了个 RSA implementation 然而实现却是一个 xor 还不是 sbox | 
|  |      28LioMore      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; } | 
|  |      29xbb7766      2015-08-19 01:01:10 +08:00 via Android 字符串查找取年月日的值。 丫开发的环境是中文系统,服务器是英文系统,上服务器测试运行时候就在这地方崩了。。。 | 
|  |      32moe3000      2015-08-19 08:40:53 +08:00 有些复杂的对象我也这么转 json 233 | 
|      33RagingSweet      2015-08-19 08:44:33 +08:00 你们这些代码和某四大银行核心系统的溢出判断代码相比都写的太好啦 | 
|      34gongpeione      2015-08-19 09:21:07 +08:00  1 看过一段这样的代码   看到上面的回复又感觉这个还好的样子了 2333 | 
|  |      35thinkmore      2015-08-19 09:49:05 +08:00 @letitbesqzr 他知道用 StringBuffer 已经很好了 | 
|      36geeksu      2015-08-19 09:51:33 +08:00 ]  ] ] ] ] ] ] ] ] return 0;] | 
|  |      37fwrq41251      2015-08-19 10:05:26 +08:00 这帖子真的不是在黑 java? | 
|  |      38w88975      2015-08-19 11:14:41 +08:00 这是 java 还是 C# 看了半天楞是没看出来 | 
|      40julyclyde      2015-08-19 13:02:31 +08:00 twoChild 是啥? | 
|  |      41miemiekurisu      2015-08-19 13:30:32 +08:00 via Android 400 行满是深度嵌套的 if else ( 20 层),考验你的视力 | 
|  |      42yxzblue      2015-08-19 13:49:55 +08:00   | 
|  |      43xiaowangge      2015-08-19 14:07:15 +08:00  1 性别字段为 : sex , int 类型,并且 0 表示男, 1 表示女  :-) | 
|      44update      2015-08-19 14:18:19 +08:00 @gongpeione  这个 function zhuru (zhi ) 真是萌萌的。。 | 
|      45update      2015-08-19 14:18:31 +08:00 | 
|  |      46pedestrianc      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 。。。。。同事的代码。 | 
|  |      47letitbesqzr OP @xiaowangge 哈哈 以前遇到过... 身份信息..本来只有两个 1 代表医生 0 代表居民 。。。在程序里用 true 和 false ... 后来说要加一个 管理员身份,就傻逼了。 | 
|      48zacard      2015-08-19 14:47:09 +08:00 糟糕代码不报错,你就谢天谢地吧。遇到不测试(甚至有编译时错误)就直接提交代码的,你哭都来不及。。。 | 
|  |      49andybest      2015-08-19 15:20:20 +08:00 | 
|      50aivier      2015-08-19 15:21:52 +08:00 JS 里用 JSON , C#配合 PHP 服务器端一直用 XML ,这写法也是够惊人的.... | 
|  |      51mozartgho      2015-08-19 15:42:46 +08:00 楼主,体现你 performance 的时候到了! | 
|      53cz208209      2015-08-19 15:52:06 +08:00 | 
|  |      54akira      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 我们问他,万一字母不够用怎么办 | 
|  |      55scarlex      2015-08-19 16:44:58 +08:00 @xiaowangge ...我觉得应该反过来才对啊, 0 表示女, 1 表示男... | 
|      57reinhardzoe      2015-08-19 16:52:50 +08:00 坐等 "我就是那个 1 表示 girl,0 表示 boy 的程序员" | 
|  |      58xiaowangge      2015-08-19 17:25:20 +08:00 | 
|  |      59jjed0119cs04      2015-08-19 17:28:44 +08:00 我擦。这么多人。。。 | 
|      60siteshen      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']) | 
|  |      61wupher      2015-08-19 17:42:36 +08:00 | 
|  |      62369830973      2015-08-19 17:51:15 +08:00 楼主 GGE 的煞笔 | 
|  |      63glasslion      2015-08-19 18:07:43 +08:00 @xiaowangge 哈哈, 我见过用 1 , 2 代表性别的, 然后表里还有值为 3 , 4 的数据 | 
|  |      64wangccddaa      2015-08-19 18:11:19 +08:00 @wupher 好大一个坑啊,这个出个规范+代码 review 应该可以避免 | 
|  |      65hitsmaxft      2015-08-19 18:46:36 +08:00 via iPhone 用 velocity 拼接 json | 
|  |      67582033      2015-08-20 10:38:12 +08:00 我没法粘贴,一个 function 3000 行!!!! 3000 行啊!!! if 又 if 让我怎么看!!! |