Как Вы поддерживаете свой словарь программы? [закрытый]

Интересно, что люди в этих ответах затронули как Object.keys(), так и for...of, но никогда не комбинировали их:

var map = {well:'hello', there:'!'};
for (let key of Object.keys(map))
    console.log(key + ':' + map[key]);

Вы не можете просто for...of Object, потому что это не итератор и for...index или .forEach() в Object.keys() являются уродливыми / неэффективными. Я рад, что большинство людей воздерживаются от for...in (с проверкой или без проверки .hasOwnProperty()), так как это тоже немного грязно, поэтому, кроме моего ответа выше, я здесь, чтобы сказать ...


Вы можете сделать обычные ассоциации объектов итерации! Поведение так же, как Map s с прямым использованием fancy for...of DEMO , работающего в Chrome и FF (я предполагаю только ES6)

var ordinaryObject = {well:'hello', there:'!'};
for (let pair of ordinaryObject)
    //key:value
    console.log(pair[0] + ':' + pair[1]);

//or
for (let [key, value] of ordinaryObject)
    console.log(key + ':' + value);

Пока вы включаете моя подкладка ниже:

//makes all objects iterable just like Maps!!! YAY
//iterates over Object.keys() (which already ignores prototype chain for us)
Object.prototype[Symbol.iterator] = function() {
    var keys = Object.keys(this)[Symbol.iterator]();
    var obj = this;
    var output;
    return {next:function() {
        if (!(output = keys.next()).done)
            output.value = [output.value, obj[output.value]];
        return output;
    }};
};

Без создания реального объекта карты, который не имеет приятного синтаксического сахара.

var trueMap = new Map([['well', 'hello'], ['there', '!']]);
for (let pair of trueMap)
    console.log(pair[0] + ':' + pair[1]);

На самом деле, с помощью этой прокладки, если вы все еще хотели воспользоваться другими функциональными возможностями карты (без их обкатки), но все же хотели использовать аккуратную нотацию объекта, поскольку теперь объекты теперь можно итерабельны, теперь вы можете просто сделать карту из нее!

//shown in demo
var realMap = new Map({well:'hello', there:'!'});

Для тех, кто не любит подмешивать или вообще не вмешивается в prototype, не стесняйтесь делать эту функцию на окне, называя ее чем-то вроде getObjIterator(), тогда:

//no prototype manipulation
function getObjIterator(obj) {
    //create a dummy object instead of adding functionality to all objects
    var iterator = new Object();

    //give it what the shim does but as its own local property
    iterator[Symbol.iterator] = function() {
        var keys = Object.keys(obj)[Symbol.iterator]();
        var output;

        return {next:function() {
            if (!(output = keys.next()).done)
                output.value = [output.value, obj[output.value]];
            return output;
        }};
    };

    return iterator;
}

Теперь вы можете просто называть его обычной функцией, ничего больше не влияет

var realMap = new Map(getObjIterator({well:'hello', there:'!'}))

или

for (let pair of getObjIterator(ordinaryObject))

Нет причин, по которым это не было бы

Добро пожаловать в будущее.

5
задан Aza 11 April 2013 в 06:26
поделиться

5 ответов

Большинство проектов разумного размера должно иметь документ стандартов программирования/кодирования, который диктует общие конвенции и рекомендации по именованию, которые должны сопровождаться.

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

3
ответ дан 15 December 2019 в 01:15
поделиться

@Ilya Ryzhenkov,

Я боюсь, что большинство компаний не имеет такой практики :) Я работал в not-so-small компании с многомиллионной кодовой базой LOC, и у них нет документации вообще (около общей инструкции по кодированию)

На одном из моих проектов мы поддержали тезаурус распространенных терминов, использованных в нашем домене приложения, и использовали его во время обзора кода. Я анализировал разность документации XML.NET время от времени для решения, какой entities\terms должен быть добавлен к тезаурусу. Только средство обеспечить соблюдение с тезаурусом кодировало инструкцию.

Подход Wiki оказался неприменимым, потому что никто не хочет обновить его регулярно :)

Я задаюсь вопросом, какие методы Вы используете в JetBrains? Я осмотрел код ReSharper в Отражателе, и был поражен с числом и названиями объектов :)

1
ответ дан 15 December 2019 в 01:15
поделиться

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

0
ответ дан 15 December 2019 в 01:15
поделиться

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

Объединение доменного словаря и использование технических конвенций выше его могли быть хорошим решением.

0
ответ дан 15 December 2019 в 01:15
поделиться

Моя команда сохраняет этот вид информации (конвенции/словарь и т.д.) на Wiki. Это помогает усовершенствовать и совместно использовать.

0
ответ дан 15 December 2019 в 01:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: