Может ли что-то быть инициализируемым? - PullRequest
7 голосов
/ 25 декабря 2008

Я создал интерфейс с именем Initializable, но согласно Dictionary.com это не слово. Поиск Google дает только около 30 тыс. Результатов, и в основном это ссылки на API.

Есть ли другое слово для описания чего-то, что может быть инициализировано (что является словом)?

Edit:

Спасибо за вопросы о том, что он находится в конструкторе, это может быть лучше. Сейчас они являются статическими классами (такими же статичными, как и в Ruby), которые загружаются динамически и имеют некоторые возможности инициализации.

Ответы [ 9 ]

19 голосов
/ 25 декабря 2008

Технические люди все время создают новые слова. (см. пример ниже) Но это не тот случай, когда создается новое слово. Это случай «деривации». Вы взяли совершенно хорошее слово ("initialize") и добавили к нему хороший * * * * * * * * производный суффикс ("able") Результирующее слово инициализируемое является производным словом.

Короче говоря, если что-то можно инициализировать, оно инициализируется. Также как он может быть запущен или остановлен.

Теперь, я не думаю, что пройдет много времени, прежде чем нацистская грамматика укажет на ошибку моих путей здесь. Но английский - это богатый и выразительный язык. Слово не должно быть указано на "dictionary.com", чтобы оно было действительным. Даже на m-w.com (который я считаю лучшим сайтом).

Одна из моих любимых книг - Современное американское использование Гарнера . Это отличная книга и больше, чем словарь - это справочник и руководство по использованию американского английского.

«Атомное» - хороший пример слова, которое мы все время используем в разработке программного обеспечения, которое является чем-то вроде «вымышленного» слова. В контексте разработки то, что является атомарным, либо происходит, либо не происходит - его нельзя разделить на отдельные операции. Но общее определение этого слова не учитывает это использование.

Ба! Вот лучше .... "Grep" Нет в словаре - но все же, совершенно хорошее слово. Я использую это все время

7 голосов
/ 25 декабря 2008

Как насчет -

interface ICanBeInitialized

или ... (а у меня было немного выпить Рождество ... очень жаль)

interface ICanHazInitialization
3 голосов
/ 25 декабря 2008

Я думаю, что вопрос - кроме педантичного вопроса о слове, о котором я упомяну ниже, - заключается в том, каким может быть поведение, которое вы намереваетесь определить с помощью этого тега "Initializable".

Это не редкий стиль - писать закрытый метод init (), например, в Java для сложной инициализации; поскольку этот код может понадобиться в нескольких местах (например, с помощью конструкторов копирования, операций клонирования и т. д.), это просто хорошая форма. Менее распространено, но допустимо, иметь класс Forward, который создается, но ожидает какой-то асинхронной операции для полной инициализации (например, шаблон Asynchronous Completion Token). Так что это не обязательно так, что это должно быть только в ctor, но мне любопытно, какое реальное поведение вы хотите.

В слове английский язык несколько агглютинирующий, как и немецкий: существуют грамматические правила, которые строят произведения из базовых слов и из их слогов в шаблонах. один из них здесь, «Initial» -> «initialize» => «initializable». Любой носитель языка распознает «инициализируемый» как нечто, обладающее свойством инициализации. Таким образом, это слово-значение, но оно отсутствует в словаре по той же причине, что и не содержит отдельных записей для множественного числа.

2 голосов
/ 25 декабря 2008

Я не вижу ничего плохого в том, чтобы придумать слово для API-подобной вещи, если придуманное слово ясно.

Я думаю, что были изобретены худшие слова, чем Initializable - такие как 'stringize' и 'RAII' (я знаю, что это не слово, но это все еще термин, который часто используется, и заставляет меня каждый раз съеживаться - даже если концепция doubleplusgood).

Проблема, с которой я могу столкнуться с Initializable, заключается в том, что она звучит как интерфейс, который делает то, что должен делать конструктор.

1 голос
/ 25 декабря 2008

Да. Не позволяйте отсутствию слова испортить ваше творчество, если смысл ясен

1 голос
/ 25 декабря 2008

Да, все в порядке. Термины программирования не должны быть в словаре. Dictionary.com также не нравится "Serializable", и мы все знаем, что все в порядке.

1 голос
/ 25 декабря 2008

Если Initializable наиболее четко описывает, что представляет собой интерфейс, я бы не стал пытаться найти другое слово только для того, чтобы оно было действительным английским словом. Пока это не строка пользовательского интерфейса, приоритет должен быть в ясности именования, а не в правильности слова в английском языке.

1 голос
/ 25 декабря 2008

Если Google возвращает ссылки на API для «Initializable», мне кажется, что это правильное имя интерфейса, хотя это может быть неверное английское слово. Нет ничего плохого в использовании вымышленного слова, если оно носит описательный характер.

Единственное, что меня смущает, это то, что классы обычно могут быть инициализированы через их конструктор. Как ваш интерфейс обеспечивает функциональность, недоступную при использовании конструктора? Ответ на этот вопрос может дать более описательное имя, чем просто «Initializable». (т.е. каким образом это инициализируется?)

0 голосов
/ 06 декабря 2009

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

Пример фабрики:

    public static T CreateSingleInstance<T>(string providerName, string sectionName)           
    {
        //create the key
        ProviderKey key = new ProviderKey(providerName, typeof(T));

        //check key
        if (!_singletons.ContainsKey(key))
        {
            object provider = _singletons[key] = CreateInstance<T>(providerName, sectionName);

            IInitializable initializableProvider = provider as IInitializable;
            if (initializableProvider != null)
                initializableProvider.Initialize();
        }

        return (T)_singletons[key];
    }

Пример реализации Конструкторы, которые могут вызвать состояние гонки

    public class Class
    {
        public Class()
        {
            Factory.CreateSingleInstance<OtherClass>(null, null);
        }
    }
    public class OtherClass
    {
        public OtherClass()
        {
            Factory.CreateSingleInstance<Class>(null, null);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...