March 17, 2006
Крик души
В очередной раз наткнулся недавно на вот такой код.
Честно говоря, становится не по себе от таких выкрутасов. Ну что мешает просто написать
Ведь так и читать проще и писать меньше.
Можно подумать, что такие "опечатки" исправит оптимизатор. А вот и ничего подобного.
Итак. Пишем следующий код:
Два метода делают одно и то же. Собираем это всё в библиотеку и провеярем что нам даст ILDASM.
Это раз.
И.
Это два.
Вот уж тут против нечего сказать. Действительно код короче и проще.
Так что... Я за красоту исходного кода.
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
Это два.
Вот уж тут против нечего сказать. Действительно код короче и проще.
Так что... Я за красоту исходного кода.