转换的哪种命名惯例在大多数语言中都是标准的?
convert_from_typea_to_typeb(arg)
或
convert_to_typeb_from_typea(arg)
还是有其他标准吗?
答案 0 :(得分:2)
我要在这里使用OO方法,(在相关命名空间中)有一个Convert
类,其中包含一堆重载To<TypeName>
,如下所示:
public class Convert
{
public Foo ToFoo(Bar instance);
public Foo ToFoo(Baz instance);
public Bar ToBar(Foo instance);
public Bar ToBar(Baz instance);
public Baz ToBaz(Foo instance);
public Baz ToBaz(Bar instance);
}
public class Convert
{
public Foo ToFoo(Bar instance);
public Foo ToFoo(Baz instance);
public Bar ToBar(Foo instance);
public Bar ToBar(Baz instance);
public Baz ToBaz(Foo instance);
public Baz ToBaz(Bar instance);
}
补充因为php专门进入了对话;你不能真正在PHP中“重载”,但有一种方法可以做到:
class ConversionException extends Exception
{
}
class Convert
{
public static function ToFoo($instance)
{
$from_type = get_class($instance);
$my_convert_method = $from_type . 'ToFoo';
if (method_exists(__CLASS__, $my_convert_method))
{
return self::$my_convert_method($instance);
}
else
{
throw new ConversionException(sprintf('Cannot convert %s to Foo.', $from_type));
}
}
protected static function BarToFoo(Bar $instance)
{
/* conversion implementation here */
}
protected static function BazToFoo(Bar $instance)
{
/* conversion implementation here */
}
/* you get the point */
}
答案 1 :(得分:1)
我的答案,纯粹是主观的,将是从源头到目的地的逻辑流动。
ConvertStringToInt()
或
ConvertVisitorToCustomer()
答案 2 :(得分:0)
我想在C(++)中你可以使用强制转换运算符,所以这些名称都不适合。
在Objective-C中我见过类似NSPointFromCGPoint(...)的东西,或者你只是在构造函数中给出旧类型。
我唯一看到非常的东西很少是那些带有convert_x_to_y的函数: - )
答案 3 :(得分:0)
这种事情没有跨语言标准。大多数语言都提供了内置的方法(C / C ++)或鼓励你找到另一种方法(Java / C#)。
在大多数面向对象的语言中,您不应该需要这种功能。您应该尝试重新构建程序,这样您就不需要进行任何明确的转换。
但是,如果你真的需要这样做,我会说在开始时删除“转换”并执行<source>_to_<target>
。示例:string_to_int
,int_to_float
,foo_to_bar
等。(当然,无论您的语言更喜欢哪种情况,请写下这些内容。例如,在C#中:StringToInt
;在JavaScript中: stringToInt
。)