March 17, 2006

Крик души

В очередной раз наткнулся недавно на вот такой код.


if( logical_expression )
return true;
return false;


Честно говоря, становится не по себе от таких выкрутасов. Ну что мешает просто написать
return logical_expression;

Ведь так и читать проще и писать меньше.

Можно подумать, что такие "опечатки" исправит оптимизатор. А вот и ничего подобного.
Итак. Пишем следующий код:


using System;

namespace NS{

public class MainLibCLass{
public static bool Foo( int a, int b ){
return ( a == b );
}

public static bool Bar( int a, int b ){
if( a == b )
return true;
return false;
}
}

}


Два метода делают одно и то же. Собираем это всё в библиотеку и провеярем что нам даст ILDASM.


.method public hidebysig static bool Foo(int32 a, int32 b) cil managed
{
// Code size 9 (0x9)
.maxstack 2
.locals init (bool V_0)
IL_0000: ldarg.0
IL_0001: ldarg.1
IL_0002: ceq
IL_0004: stloc.0
IL_0005: br.s IL_0007
IL_0007: ldloc.0
IL_0008: ret
} // end of method MainLibCLass::Foo


Это раз.
И.

.method public hidebysig static bool Bar(int32 a, int32 b) cil managed
{
// Code size 14 (0xe)
.maxstack 2
.locals init (bool V_0)
IL_0000: ldarg.0
IL_0001: ldarg.1
IL_0002: bne.un.s IL_0008
IL_0004: ldc.i4.1
IL_0005: stloc.0
IL_0006: br.s IL_000c
IL_0008: ldc.i4.0
IL_0009: stloc.0
IL_000a: br.s IL_000c
IL_000c: ldloc.0
IL_000d: ret
} // end of method MainLibCLass::Bar

Это два.

Вот уж тут против нечего сказать. Действительно код короче и проще.

Так что... Я за красоту исходного кода.

This page is powered by Blogger. Isn't yours?