类似C#的语言,没有大括号

时间:2013-08-22 11:50:25

标签: c# python ironpython

我非常喜欢C#作为编程语言。 但我真正希望在其中看到的一种方法是用Python中的方式分隔块 - 使用标识。

我简单介绍了IronPython,但它似乎带来了比我需要的更多的python东西。

有人知道使用标识而不是大括号的简单方法吗?

UPD: 请比较C#中的类定义:

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

和Python:

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

查看C#变体中使用了多少冗余空间。我的目标是使用两种语言中最好的。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

要在代码中“保存”空间,您始终可以采用这种编码方式:

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

我已经使用它近一年了,对我的代码的可读性非常满意。

答案 2 :(得分:0)

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

而不是

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

XDDD