V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
weakish
V2EX  ›  程序员

c# 的编码风格有点独树一帜呀

  •  
  •   weakish ·
    weakish · 2014-03-11 17:24:28 +08:00 · 7135 次点击
    这是一个创建于 3691 天前的主题,其中的信息可能已经有所发展或是发生改变。
    GitHub提供了一些分析数据的接口api,sideeffect.kr 利用这些api分析了托管在GitHub上的公开的C#代码,统计出了一些结论。

    统计结果: http://segmentfault.com/a/1190000000430024


    和别的语言有点不一样,c#的if等语句,大括号基本上都换行:

    另起一行(84.961 %)

    很多语言里都有是否另起一行的圣战。。。

    常量命名,一般语言,大部分是全大写,但是c#是三足鼎立:

    驼峰(35.304 %)

    全大写(32.093 %)

    其他 (32.603 %)

    ----

    有 C# coder 熟悉这背后的原因么?或者讲讲你自己惯用的风格?
    32 条回复    1970-01-01 08:00:00 +08:00
    cxe2v
        1
    cxe2v  
       2014-03-11 17:36:21 +08:00
    你第一次看到的代码长什么样,基本上你以后的风格就定那样了
    jsonline
        2
    jsonline  
       2014-03-11 17:47:51 +08:00 via Android
    这很重要么
    zhujinliang
        3
    zhujinliang  
       2014-03-11 17:54:02 +08:00   ❤️ 2
    C#大括号占一行是VS IDE自动格式化的,因为微软有给力的IDE,绝大多数C#程序员都用VS开发。占少部分的可能是Mono派。

    变量/类命名一般是驼峰,常量是全大写,这个一般是从C过来的,IDE没有帮忙格式化
    solo7net
        4
    solo7net  
       2014-03-11 17:55:07 +08:00
    用过VS就知道 你写个if 按下tab
    caoyue
        5
    caoyue  
       2014-03-11 18:01:33 +08:00   ❤️ 1
    我猜那篇文章提出的大多数现象的归根到底都是——C# 程序员更多的使用 VS ?
    VS 自动格式化的结果完全符合这些规律
    而常量命名刚好是 VS 格式化不涉及的,大家就各显神通了

    而且 .NET 的源码风格也是不统一的,比如 if、 class 的花括号有时候换行有时候不换行
    tonghuashuai
        6
    tonghuashuai  
       2014-03-11 18:13:31 +08:00
    我写的时候就是按 VS 推荐的格式,大括号单独占一行……
    xuan_lengyue
        7
    xuan_lengyue  
       2014-03-11 18:21:05 +08:00   ❤️ 1
    因为 VS 里面花括号默认就是单独一行的,而写 C# 的应该基本上都用的是 VS 吧。。。
    最近在写 C#,大量的判断是否为 null,要是不判断很容易就来个 Null Pointer Exception。。。
    这到底是 C# 问题还是我自己的问题。。。
    vibbow
        8
    vibbow  
       2014-03-11 19:00:54 +08:00
    因为VS默认就是这样的...
    min
        9
    min  
       2014-03-11 19:01:10 +08:00
    @xuan_lengyue 你代码的问题
    Ricepig
        10
    Ricepig  
       2014-03-11 19:50:59 +08:00
    @xuan_lengyue 这类语言就这样,Null是需要判断的。不过实际上也没什么别的好办法,ruby那样给个默认值有的时候更容易出了问题不知道。
    wingoo
        11
    wingoo  
       2014-03-11 19:54:11 +08:00
    写过几年cs
    大括号之类的一般都单独一行
    命名用驼峰, 常量大写

    @xuan_lengyue 对外接口一般都判断再判断, 内部自己用的函数, 注释上写个约定
    AstroProfundis
        12
    AstroProfundis  
       2014-03-11 20:46:26 +08:00
    因为 Visual Studio 的默认设置就是这样的,会自动格式化代码;可以自己修改,比如我就改成不换行了...
    maddemon
        13
    maddemon  
       2014-03-11 21:12:23 +08:00
    C#命名规范:
    私有字段 _xxYyZz
    局部变量、参数名 xxYyZz
    方法名、类名、公开属性、常量、只读变量 XxYyZz
    接口 IXxYyZz
    maddemon
        14
    maddemon  
       2014-03-11 21:13:02 +08:00
    纠正:只读变量->只读字段
    Linxing
        15
    Linxing  
       2014-03-11 21:22:11 +08:00
    VS是会自动大括号单独一行的吧,还有自动加空格之类的,导致现在看到大括号没有单独一行的,都要改一下,强迫症了。。
    NauhiL
        16
    NauhiL  
       2014-03-11 21:37:19 +08:00
    @xuan_lengyue VS不会自己判断变量是否为空,需要自己写个公共方法去判断对象或者变量是不是null
    ooh
        17
    ooh  
       2014-03-11 21:39:05 +08:00
    论:使用文本编辑器对你人生代码风格的影响
    rebornix
        18
    rebornix  
       2014-03-11 22:27:27 +08:00   ❤️ 1
    我基本按照Resharper的要求来命名,IDE帮忙format code确实便于代码阅读。
    zhujinliang
        19
    zhujinliang  
       2014-03-11 23:55:46 +08:00 via iPad
    @Ricepig 印象中没有这么严重啊。很多情况下可以考虑使用try catch进行简单处理,不管它是返回了什么,只要后面哪个不高兴了给出个exception,直接catch了走错误处理路线
    tangzx
        20
    tangzx  
       2014-03-12 00:57:44 +08:00 via iPhone
    .NET2001年才出来,完全没有历史负担,所以.NET内裤的命名规范异常统一

    其他的基本上各种历史原因什么unix什么c什么大神什么xxxxnic当然宗教战争啦
    zkd8907
        21
    zkd8907  
       2014-03-12 07:39:24 +08:00
    @rebornix Resharper真心好用,就是资源吃太多了。
    rebornix
        22
    rebornix  
       2014-03-12 09:56:03 +08:00
    @zkd8907 或者乃也可以试试打开stylecop,坐看自己的project被爆
    zkd8907
        23
    zkd8907  
       2014-03-12 10:00:56 +08:00
    @rebornix 我才不要自虐,而且我写的代码尤其是注释,里面连颜文字都有,被干是必须的。
    soli
        24
    soli  
       2014-03-12 10:27:56 +08:00
    空格缩进的竟然 80% 以上了。。。
    理解不能。
    rainysia
        25
    rainysia  
       2014-03-12 11:14:38 +08:00
    5年前写c#的时候用过SharpDevelop... 现在主力gvim
    soundbbg
        26
    soundbbg  
       2014-03-12 11:19:24 +08:00
    说实话这个还是看团队风格,团队风格看团队水平。有很多东西其实也没有那么重要。
    imwower
        27
    imwower  
       2014-03-12 12:42:49 +08:00
    使用vs默认的就最好,省去制定规范的时间了。其他语言也应如此。
    foxidea
        28
    foxidea  
       2014-03-12 13:07:49 +08:00
    IDE 已经规范好了代码风格,不需要再 过多的精力去关注代码风格,vs 很赞
    Narcissu5
        29
    Narcissu5  
       2014-03-12 13:13:50 +08:00
    微软出过一个C#代码规范,我记得有两条就是大括号另起一行,if while后面的语句即使只有一行也要括起来。

    @xuan_lengyue C# 6 会有monad

    foo?.foo1?.foo2?

    任何一个为空都返回null
    dieaz5
        30
    dieaz5  
       2014-03-12 14:30:27 +08:00
    我就是c#的,基本上,c#的都是vs惯出来的
    msg7086
        31
    msg7086  
       2014-03-12 15:17:04 +08:00
    VS+Resharper
    weakish
        32
    weakish  
    OP
       2014-03-13 13:58:58 +08:00
    @soli [tab和空格缩进被认为是永恒的圣战](http://www.jwz.org/doc/tabs-vs-spaces.html) 不过现在大多数人都是空格缩进了(不论使用什么语言)。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5354 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 08:56 · PVG 16:56 · LAX 01:56 · JFK 04:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.