Full Stack Blog – C# vs Java. Expression-bodied members

28 April 2023

C# vs Java. Expression-bodied members

Expression-bodied members (C# programming guide)

Очередной пересказ документации 😉

C#

Expression-body - возможность реализовать тело члена класса в очень лаконичной форме. Другими словами - это тело метода в виде одного выражения, которое может возвращать знаыение. Синтаксис чем-то напоминает определение лямбд.

Может применяться для реализации следующих членов класса:

  • Методы
  • Read-only свойства
  • Свойства
  • Конструкторы
  • Деструктор (finalizer)
  • Индексеры (indexer)

Методы

class Plant
{
    private string Name;

    public void PrintName() => Console.WriteLine(f"Plant Name: {Name}");

    public int SortOrder() => 3;
}

// or with simple Math functions
class MyMath
{
    public double Add(double x1, double x2) => x1 + x2;
    public double Div(double x1, double x2) => x1 / x2;
    ...
}

Свойства

class Plant
{
    private string internalNameVariable;

    // для read-only свойств - очень короткий формат геттера
    public string Name() => internalNameVariable;

    // или полный формат для геттера и сеттера
    public string PlantName
    {
        get => internalNameVariable;
        set => internalNameVariable = value;
    }
}

Конструкторы

class Plant
{
    private string internalNameVariable;

    public Plant(string name) => internalNameVariable = name;
}

Деструктор (finalizer)

class PlantPool
{
    ~Destroyer() => Console.WriteLine("Todo Something...");
}

Индексеры (indexer)

Используем пример из статьи C# vs Java. Indexers и перепишем с использованием expression-body

class PlantPool
{
    private Plant[] plantPool { get; init; }
    public PlantPool(int Capacity) { this.plantPool = new Plant[Capacity]; }

    public Plant this[int i]
    {            
        get => plantPool[i];
        set => plantPool[i] = value;
    }
}

Java

Java так не имеет.