免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 无风之谷
打印 上一主题 下一主题

每个程序员都应该学习使用Python或Ruby,你怎么认为? [复制链接]

论坛徽章:
0
1 [报告]
发表于 2012-05-04 17:16 |显示全部楼层
回复 10# sunny7476

无语,这哪里对应了……
要比好歹把main去掉吧。
而且上面的代码写得很渣,就算不用标准库无脑都能缩掉一堆无用代码……

论坛徽章:
0
2 [报告]
发表于 2012-05-04 17:26 |显示全部楼层
回复 60# starwing83

这是语义问题。语法上可以换汤不换药。

论坛徽章:
0
3 [报告]
发表于 2012-05-05 10:46 |显示全部楼层
回复 72# sunny7476

第一,环境支持代码包括UI在内不应该算作算法实现,这个有问题么?
在“可以运行的程序”中,大多数情况下,C++和python的代码长度的确不在一个层次上。但是你考虑过没有,C++适应多少环境,python又能适应多少?
第二,说过这段代码的罗嗦的原因不只是复用得烂了。目测不看算法都能缩掉1/3。

论坛徽章:
0
4 [报告]
发表于 2012-05-05 12:11 |显示全部楼层
本帖最后由 幻の上帝 于 2012-05-05 12:25 编辑

回复 10# sunny7476

python代码对应的C++代码也太挫了点……
替静态类型擦屁股的确得多费点劲,但也不至于这么罗嗦。瞎写了个:
  1. template<typename T>
  2. list<T> merge(list<T> l1, list<T> l2){
  3.         list<T> final;
  4.         while(!l1.empty() && !l2.empty())l1.front() < l2.front() ? (final.push_back(l1.front()), l1.pop_front()) : (final.push_back(l2.front()), l2.pop_front());
  5.         return final.splice(final.end(), l1), final.splice(final.end(), l2), final;
  6. }
  7. template<typename T>
  8. list<T> mergesort(list<T> l){
  9.         if(l.size() <= 1)return l;
  10.         auto mid(l.cbegin());
  11.         advance(mid, l.size() / 2);
  12.         return merge(mergesort(list<T>(l.cbegin(), mid)), mergesort(list<T>(mid, l.cend())));
  13. }
复制代码
对应的main:

  1. int main(){
  2.         auto l(mergesort(list<int>{3, 5, 3, 6, 4, 7, 5, 7, 4}));
  3.         for_each(l.begin(), l.end(), [](const int& i){cout<< i <<' ';});
  4.         cout << endl;
  5. }
复制代码
再补个用list::merge的:
  1. template<typename T>
  2. list<T> mergesort(list<T> l){
  3.         if(l.size() <= 1)return l;
  4.         const auto mid(next(l.cbegin(), l.size() / 2));
  5.         auto ll(mergesort(list<T>(l.cbegin(), mid)));
  6.         return ll.merge(mergesort(list<T>(mid, l.cend()))), ll;
  7. }
复制代码
(嘛……缩进莫名其妙乱了,再编辑一下好了。)

论坛徽章:
0
5 [报告]
发表于 2012-05-07 15:13 |显示全部楼层
回复 85# KanonInD

如果是auto的原意,对于函数是没办法的。因为auto需要在编译时确定具体类型。不过倒是可以考虑作为简化函数模板的语法……
另外我想explicit最好可以在每个形参上用。(虽然可能更乱。)

论坛徽章:
0
6 [报告]
发表于 2012-05-07 15:21 |显示全部楼层
回复 81# sunny7476

“瞎写”其实不是谦虚……
上面那个是直接照着python版本一口气写的,能保证语义一一对应算法正确性就没问题,也就没特别验证过。
下面一个版本倒是稍微费了点心思尽量写短一点,不过也没想过有没有更短的。

论坛徽章:
0
7 [报告]
发表于 2012-05-10 12:40 |显示全部楼层
回复 89# fallening_cu


没气象资料算出来有用?

论坛徽章:
0
8 [报告]
发表于 2012-05-10 19:32 |显示全部楼层
回复 112# fallening_cu


算轨道可以理解,但不是发射窗口吧。
发射窗口不是受地面条件影响的么?虽然对一般的卫星好像影响较小的样子……

论坛徽章:
0
9 [报告]
发表于 2012-05-19 03:59 |显示全部楼层
回复 121# OwnWaterloo

+1。
而且即便不是多人项目也一样,因为一定规模后一个人难保对自己之前写的全部代码都一样很熟悉,这样就和多人的情况有些类似了。
对我来说自己写的裹脚布代码会导致兴趣大减……
所以平时尽可能不写没必要的重复代码,尽量合理重构……即使撑不下去了重写损失也不大(因为行数少……好吧,这算心理安慰→ →)。
无解或许倒不至于,但是要平衡的确很困难。

论坛徽章:
0
10 [报告]
发表于 2012-05-19 04:06 |显示全部楼层
回复 133# haitao

有一点应该会有影响:阅读代码的效率(假设读者的水平都不成问题且对问题的熟悉程度都一样)。对于新接手的人来说差距可能会更明显一些。
另外有些看起来相对无关紧要但实际起作用的因素对维护存在影响。其中一些的劳动强度和代码行数密切相关。比如naming convention/indentation(python这样强制在编码过程中的就算了)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP