Этот вопрос был моим любимым человеком в течение некоторого времени. Я опытный программист со многими языками под моим поясом. Один из моих любимых языков, которым я имел удовольствие использовать Python. Python поддерживает именованные параметры без каких-либо обманщиков .... Поскольку я начал использовать Python (некоторое время назад), все стало проще. Я считаю, что каждый язык должен поддерживать именованные параметры, но это не так.
Многие люди говорят, что просто используют трюк «Пропустить объект», чтобы вы назвали параметры.
/**
* My Function
*
* @param {Object} arg1 Named arguments
*/
function myFunc(arg1) { }
myFunc({ param1 : 70, param2 : 175});
И это отлично работает, за исключением того, что ..... когда дело доходит до большинства IDE, многие из нас разработчики полагаются на подсказки типа / аргумента в нашей среде IDE. Я лично использую PHP Storm (наряду с другими IDE JetBrains, такими как PyCharm для python и AppCode для Objective C)
И самая большая проблема с использованием трюка «Передача объекта» заключается в том, что когда вы вызываете функцию, IDE дает вам однотипный намек и все ... Как мы должны знать, какие параметры и типы должны входить в объект arg1?
[/g0]
Итак ... трюк «Пропустить объект» не работает для меня ... Это на самом деле вызывает больше головных болей, когда приходится смотреть на док-блок каждой функции, прежде чем я узнаю, какие параметры ожидает функция. Конечно, это отлично подходит, когда вы поддерживаете существующий код, но это ужасно для написания нового кода.
Ну, это тот метод, который я использую ... Теперь могут быть некоторые проблемы с ним, и некоторые разработчики могут скажите мне, что я делаю это неправильно, и у меня есть открытый ум, когда дело доходит до этих вещей ... Я всегда готов смотреть на лучшие способы решения задачи ... Итак, если есть проблема с этой техникой , то комментарии приветствуются.
/**
* My Function
*
* @param {string} arg1 Argument 1
* @param {string} arg2 Argument 2
*/
function myFunc(arg1, arg2) { }
var arg1, arg2;
myFunc(arg1='Param1', arg2='Param2');
Таким образом, у меня есть лучшее из обоих миров ... новый код легко писать, так как моя IDE дает мне все правильные подсказки аргументов ... И, пока поддерживая код позже, я могу сразу увидеть не только значение, переданное функции, но и имя аргумента. Единственный недостаток, который я вижу, - объявлять ваши имена аргументов как локальные переменные, чтобы не загрязнять глобальное пространство имен. Конечно, это немного лишний набор, но тривиальный по сравнению с временем, требуемым для поиска докблоков при написании нового кода или сохранении существующего кода.
[/g1]
Мне было бы интересно. Я продумал подобный проект, но не смог понять, как обращаться с деталями, которые заканчивают сжатие из строя.
-121--3740476-Механизм classloader на Java является мощным, поскольку предоставляет абстракционную точку именно в той точке, где загружен код, что позволяет выполнять такие действия, как:
На точке изменения кода во время загрузки, есть мир интересных вещей, которые вы можете сделать, чтобы переделать ваш код - AOP, профилирование, трассировка, изменения поведения и т.д. В Terracotta мы полагались на абстракцию classloader, чтобы динамически загрузить класс, затем перехватить весь доступ к полям и динамически добавить возможность загрузки состояния из того же объекта на удаленном узле в кластере позже. Классные вещи.
-121--1732673-Первая итерация счетчика всегда будет равна 0, так как ей нечего сравнивать с последним значением. Попробуйте это:
var cpuload = new PerformanceCounter("Processor", "% Processor Time", "_Total");
Console.WriteLine(cpuload.NextValue() + "%");
Console.WriteLine(cpuload.NextValue() + "%");
Console.WriteLine(cpuload.NextValue() + "%");
Console.WriteLine(cpuload.NextValue() + "%");
Console.WriteLine(cpuload.NextValue() + "%");
Тогда вы должны увидеть некоторые данные выходят. Это сделано, чтобы быть увиденным в постоянном графике или обновленном сценарии... вот почему вы не сталкиваетесь с этой проблемой часто.
Вот ссылка MSDN :
Метод nextValue () всегда возвращает значение 0 для первого вызова. Так что вы необходимо вызвать этот метод в секунду время.