Функции преобразования имен - PullRequest
1 голос
/ 06 июня 2010

Какое соглашение об именах для конверсий является стандартным для большинства языков?

convert_from_typea_to_typeb(arg)

или

convert_to_typeb_from_typea(arg)

Или есть другой стандарт?

Ответы [ 4 ]

2 голосов
/ 06 июня 2010

Я собираюсь использовать здесь подход OO (в соответствующем пространстве имен) класс Convert с кучей перегрузок To<TypeName>, например: </p> <pre><code>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 { }</p> <pre><code>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 голос
/ 06 июня 2010

Мой ответ, и чисто субъективный, будет таким, который логически вытекает из источника в пункт назначения.

ConvertStringToInt()

или

ConvertVisitorToCustomer()
0 голосов
/ 06 июня 2010

Не существует кросс-языкового стандарта для такого рода вещей. Большинство языков либо предоставляют встроенный способ сделать это (C / C ++), либо рекомендуют вам найти другой способ обойти это (Java / C #).

В большинстве объектно-ориентированных языков такой функциональности не требуется. Вы должны попытаться реструктурировать свою программу так, чтобы вам не нужно было делать какие-либо явные преобразования.

Однако, если вам действительно нужно это сделать, я бы сказал, в начале сбросьте «convert» и выполните <source>_to_<target>. Примеры: string_to_int, int_to_float, foo_to_bar и т. Д. (Конечно, пишите их в любом случае, который предпочитает ваш язык. Например, в C #: StringToInt; в JavaScript: stringToInt.)

0 голосов
/ 06 июня 2010

Полагаю, в C (++) вы бы делали это с помощью операторов приведения, поэтому ни одно из этих имен не подходит.

В Objective-C я видел что-то вроде NSPointFromCGPoint (...), или вы бы просто дали старый тип в конструкторе.

Единственное, что я видел очень редко - это функции с convert_x_to_y: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...