看到这段代码,我想很多程序员哭笑不得。首先代码逻辑有点hacky,初步判断应该是 JARVIS_FACEREC 没来得及完成。。。所以赶鸭子上架暂时用 RC_MODEL 来顶上;毕竟马上就Christmas和新年了,Zuck没做完也要先赶在deadline之前发布嘛。 注意!我觉得这个态度和做事方式才是对的, 不要拖,也不要等到完美的时候才发布,因为一个项目一个作业永远都无法达到你想要的完美状态。正如Zuck自己之前在Facebook里强调:“Done is better than perfect!” 4 idx是一个helper method,其实就等于 $api_config['detection_tier'],但是用idx的好处是如果 $api_config 为空,那么 idx 不会崩溃,而是返回null,而 $api_config['detection_tier'] 直接触发异常。 所以这里回头看,Zuck的80行写得并不好,最好写成:$api_config = idx(api_config, 'facer'); 对了,idx还可以支持第三个参数,就是默认值;如果这个key在map中没有的话,就直接返回默认值。 5 这句是技术含量最高的一句。FaceDetectRequestConfig::gen,这里gen代表generator,由于历史原因,Facebook的代码用的是generator,所以异步操作就起名gen;但是这里用的是新的 resumable function;也就是 ::gen 返回一个 awaitable object(类似promise,如果你玩js或者其他语言),然后前面的await就将异步操作出发执行,最后得到从 detection_tier 来的 config。 具体关于 async & await,以及 resumable function 可以参考:
(这里PHP中的resumable function是Facebook自己做的语法加强;C#里一直就有,而C++会在下一代的C++1y里引入 resumable function)。 6 print "Configured...n" 这句话太萌,典型的学生项目代码。 类似于: console.log(xxx) 或者 :System.out.println("Configured...) 再或者:NSLog(@"Configured..."); 要是公司项目的代码这么写,估计要被tech lead直接骂死。不过这里Zuck敢于自己动手开始写代码,并且最后可以有一个prototype上线开始能够使用,已经非常厉害了(毕竟很多CEO一天到晚忙除了开会,几乎什么都做不了)。 最后我个人认为Zuck那段代码的最佳形态是:(如果你们有更好的想法或者建议,欢迎留言讨论 :D)
--- END --- 希望这些细节让各位可以有启发。 (责任编辑:本港台直播) |