2013-08-22 3 views
0

Мне очень нравится C# как язык программирования. Но одна вещь, которую я действительно хотел бы видеть в этом, - это способ разделения блоков так, как это делается в Python - с идентификацией.C# -образный язык без фигурных скобок

У меня был краткий взгляд на IronPython, но он, кажется, приносит гораздо больше материала python, чем мне нужно.

Кто-нибудь знает простой способ использовать идентификацию вместо фигурных скобок?

UPD: Пожалуйста, сравните определение класса в C#:

class Foo 
{ 
    public string bar() 
    { 
     return "smth"; 
    } 
} 

и Python:

class Foo(object): 
    def bar(self): 
     return "smth" 

Посмотрите, сколько избыточное пространство используются в C# варианта. Моя цель - использовать лучшее с обоих языков.

+0

Не реальный вопрос, и эм ... .use VB.NET? – series0ne

+0

Не могли бы вы дать некоторые намеки на то, что вы пытаетесь выполнить и почему? Каковы ваши требования? @ series0ne, как вы думаете, /End еще хуже, чем брекеты? Этот вопрос требует отступов как концепции структурирования. –

+0

Что не так с фигурными скобками? Они дают четкое представление о том, где начинается и заканчивается блок. Учитывая, что C, C++, C#, Java, JavaScript, TypeScript, Dart (чтобы назвать их несколько) используют их, я бы сказал, что для них было больше причин, чем против! – series0ne

ответ

0

Чтобы «сохранить» пространство в вашем коде вы всегда можете адаптировать этот стиль кодирования:

private void DoWork() { 
if(true) { 
    DoMoreWork(); 
} else { 
    DoLessWork(); 
} 
} 

Я использую его почти год, и я очень доволен читаемости моего кода.

+0

Да, я знаю о таком стиле. Но все же не такой элегантный, как у Python. –

+0

Кроме того, не стилистическое соглашение в C# ... это скорее соглашение, используемое в Java/JavaScript. StyleCop будет жаловаться на это, если вы даже решите использовать это – series0ne

+0

http://kotaku.com/454293019 то, что я сильно восхищаюсь.Я пытаюсь использовать этот стиль кодирования везде, куда бы я ни пошел. C, C++, C#, не имеет значения. Это ясно, чисто и мощно. –

0
return someValue == true ? DoSomething() : DoSomethingElse() 

вместо

if (someValue == true) 
{ 
    DoSomething(); 
} 
else 
{ 
    DoSoemthingElse(); 
} 

XDDD

2

Boo является .Net язык со статической типизацией. Он использует CLR, чтобы вы могли совместно использовать другой .Net-код, включая C#; он работает с winforms и system.io и другими знакомыми библиотеками. Это выглядит как Python: Сравним эти это Boo:

internal class TileBytes: 

    public Size as int 

    public def constructor(size as int): 
     Size = size 

    public def Generate(tile as Tile) as (byte): 
     buffer as (byte) = array(byte, ((Size * Size) * 3)) 
     for u in range(0, Size): 
     for v in range(0, Size): 
      pixelColor as Color32 = GetColor(tile, u, v) 
      bufferidx as int = (3 * ((u * Size) + v)) 
      buffer[bufferidx] = pixelColor.r 
      buffer[(bufferidx + 1)] = pixelColor.g 
      buffer[(bufferidx + 2)] = pixelColor.b 
     return buffer 

    public def GetColor(tile as Tile, u as int, v as int) as Color32: 
     h as int = (0 if (v > (Size/2.0)) else 2) 
     w as int = (0 if (u > (Size/2.0)) else 1) 
     tc as TileCorner = ((h cast TileCorner) + w) 
    return tile[tc].GetPixel(v, (Size - (u + 1))) 

на это в C#

class TileBytes 
{ 
public int Size; 
public TileBytes(int size) 
{ 
    Size = size; 
} 

public byte[] Generate(Tile tile) 
{ 
    byte[] buffer = new byte[Size * Size * 3]; 
    for (int u = 0; u < Size; u++) 
    { 
     for (int v = 0; v<Size; v++) 
     { 
      Color32 pixelColor = GetColor (tile, u, v); 
      int bufferidx = 3 * ((u * Size) + v); 
      buffer[bufferidx] = pixelColor.r; 
      buffer[bufferidx + 1] = pixelColor.g; 
      buffer[bufferidx + 2] = pixelColor.b;    
     } 
    } 
    return buffer; 
} 

public Color32 GetColor(Tile tile, int u, int v) 
{ 
    int h = v > Size/2.0 ? 0 : 2; 
    int w = u > Size/2.0 ? 0 : 1; 
    TileCorner tc = (TileCorner) h + w; 
    return tile[tc].GetPixel(v, Size - (u + 1)); 
} 
} 

Boo также является активным open source project

Смежные вопросы