Подскажите пожалуйста, как реализовать
Вот исходный код
vm.RegisterCommand('+', v => Inc(v));
private static void Inc(IVirtualMachine v)
{
if (v.Memory[v.MemoryPointer] == (char)255)
v.Memory[v.MemoryPointer] = (char)0;
else
v.Memory[v.MemoryPointer]++;
}
Хочу заменить на что то вроде
vm.RegisterCommand('+', b => (b.Memory[b.MemoryPointer] == 255) ? 1 : 2 );
на 1:2 не обращайте внимания это для сокращения кода
Ответ
Ну у вас по сути сложение по модулю, поэтому можно записать вместо if что-то вроде v.Memory[v.MemoryPointer] = (char)((v.Memory[v.MemoryPointer] + 1) % 256), ну и, соответственно, в виде лямбды:
vm.RegisterCommand('+', v =>
v.Memory[v.MemoryPointer] = (char)((v.Memory[v.MemoryPointer] + 1) % 256));
Если IVirtualMachine.Memory – это реально byte-массив, то код можно сократить:
vm.RegisterCommand('+', v => v.Memory[v.MemoryPointer]++));
Если вы хотите переписать свой метод дословно, то это будет выглядеть так:
vm.RegisterCommand('+', v =>
{
if (v.Memory[v.MemoryPointer] == (char)255)
v.Memory[v.MemoryPointer] = (char)0;
else
v.Memory[v.MemoryPointer]++;
});
Но это не улучшает читаемость, а даже скорее наоборот.
А с использованием тернарного оператора, например, так:
vm.RegisterCommand('+', v =>
v.Memory[v.MemoryPointer] = (char)(v.Memory[v.MemoryPointer] == 255
? 0
: (v.Memory[v.MemoryPointer] + 1)
));
Комментариев нет:
Отправить комментарий