代码之家  ›  专栏  ›  技术社区  ›  waiwai933

命名转换函数

  •  1
  • waiwai933  · 技术社区  · 14 年前

    在大多数语言中,哪种转换命名约定是标准的?

    convert_from_typea_to_typeb(arg)
    

    convert_to_typeb_from_typea(arg)
    

    还是有其他标准?

    4 回复  |  直到 14 年前
        1
  •  2
  •   Kris    14 年前

    我将在这里使用OO方法,(在相关的名称空间中)有一个 convert class with a bundle of overloads to<typename> like so: <代码> >/P>

    公共类转换
    {
    公共foo tofoo(bar实例);
    公共foo tofoo(baz实例);
    公共酒吧Tobar(foo实例);
    公共酒吧Tobar(BAZ实例);
    公共baz tobaz(foo实例);
    公共baz tobaz(酒吧实例);
    }
    < /代码> 
    
    

    addition因为php专门用于对话;您不能在php中真正执行“重载”,但有一种方法可以做到: <代码> 类ConversionException扩展异常 { }< /代码>

    类转换
    {
    公共静态函数tofoo($instance)
    {
    $from_type=get_class($instance);
    $my_convert_method=$来自_type.。豆腐;
    
    if(method_exists(uu class_uuu,$my_convert_method))。
    {
    返回self::$my_convert_方法($instance);
    }
    其他的
    {
    引发新的ConversionException(sprintf('cannot convert%s to foo.',$from_type));
    }
    }
    
    受保护的静态函数bartofoo(bar$instance)
    {
    /*此处为转换实现*/
    }
    受保护的静态函数baztofo(bar$instance)
    {
    /*此处为转换实现*/
    }
    /*你明白我的意思了*/
    }
    < /代码> 
    
    

    对于这里的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);
    }
    

    附加由于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 */
    }
    

        2
  •  1
  •   p.campbell    14 年前

    我的答案,纯粹是主观的,是一个逻辑上从源头流向目的地的答案。

    ConvertStringToInt()
    

    ConvertVisitorToCustomer()
    
        3
  •  0
  •   Eiko    14 年前

    我猜在C(++)中,您可以使用cast操作符,所以这些名称都不适合。

    在objective-c中,我看到过类似nspointfromcgpoint(…)的内容,或者您只需在构造函数中给出旧类型。

    我唯一看到的 非常 这些函数很少有转换为-

        4
  •  0
  •   Sasha Chedygov    14 年前

    这种事情没有跨语言标准。大多数语言都提供了一种内置的方式来实现这一点(C/C++),或者鼓励你去寻找另一种方法(Java/Cype)。

    在大多数面向对象的语言中,您不应该需要这种功能。您应该尝试重新构造程序,这样就不需要进行任何显式转换。

    但是,如果你真的需要这样做,我会说在开始时去掉“convert”,然后做 <source>_to_<target> . 实例: string_to_int , int_to_float , foo_to_bar 等等(当然,不管你的语言喜欢哪种情况,都要写这些。例如,在c: StringToInt ;在javascript中: stringToInt )