Вы можете использовать остальные параметры ...
, собрать все аргументы обеих функций и вернуть уменьшенный результат.
function multiply(...a) {
return function(...b) {
return [...a, ...b].reduce((a, b) => a * b);
};
}
console.log(multiply(4)(5)); // 20
console.log(multiply(2)(4, 5)); // 40
console.log(multiply(3, 2)(4, 5)); // 120
Ответ на этот вопрос не является абсолютным, поскольку он часто зависит от задачи, Вы имеете под рукой. Если Вы создаете некоторый SDK для повторного использования другими, то пространства имен очень важны; однако при создании внутреннего инструмента со всего несколькими классами пространства имен в значительной степени неважны.
Вообще говоря, классы должны иметь свой собственный файл, поскольку это упрощает, как люди перешли вокруг решения для кода, помогающего с разработкой и обслуживанием (намного более трудно объединить изменения, когда все изменяют те же файлы, например). Может быть приемлемо разделить один класс через несколько файлов в некоторых ситуациях, таких как:
Когда существуют вложенные классы, каждый вложенный класс мог иметь свой собственный файл.
Когда существуют автоматически сгенерированные части к классу, такие как код разработчика.
Когда существуют зафиксированные части к классу, такие как единый набор скрытых свойств или общая реализация интерфейса.
В одном из наших проектов у нас есть общая реализация интерфейса, который выставляют много классов. Поскольку у нас нет множественного наследования, мы берем соединение - в подходе, посредством чего мы автоматически генерируем дополнительный файл для каждого класса. Это могло быть сделано вручную, вместо автоматически (и был, первоначально).
Существуют другие ситуации, но это несколько субъективно и зависит от требований Вашего собственного проекта.
Пространства имен должны обычно фокусироваться на разумных группировках Ваших типов. Пространство имен должно позволить разработчику интуитивно определять местоположение того, что они ищут. Для многих маленьких проектов, единое пространство имен такой как MyAwesomeTool
достаточно, но для большего проекта со многими классами будет нуждаться в более логической группировке. Такие крупные проекты, как SDKs или BCL.NET полагаются на пространства имен к разбивке иначе в подавляющем большинстве большое количество типов. Каждый уровень пространства имен предоставляет дополнительную информацию того, что могло бы быть найдено там, такой как System.Windows.Forms
или System.Drawing
или Microsoft.VisualBasic
.
При создании пространств имен каждое внимание должно быть уделено цели того пространства имен и связанного проекта. Если проект является внутренним и маленьким, назовите пространство имен, что Вы любите, поскольку это - просто необходимость группировки Ваших типов; если проект внешне видим или содержит большую сумму типов, думайте тщательно о логических и значимых группировках, которые позволят другим интуитивно найти типы, которые они ищут.
Нет никаких жестких правил, которые работают в каждой ситуации. То, как Вы располагаете свой код в файлы, касается Ваших собственных процессов разработки, влияя на Вас и Вашу команду; все Ваши классы в одном файле будут адом для разработки с, но скомпилированный продукт не будет действовать несколько отличающийся (если один подход файла не привел к ошибкам), тогда как расположение пространств имен касается будущей разработки и потребителей тех пространств имен, таким образом, последствия понимания превратно его могут быть более серьезными.
В большинстве рекомендаций, которые я видел, говорится, что каждый открытый тип должен быть в его собственном файле, и пространства имен должны представить структуру папок приложения.
Я делаю 99% от 1 до 1 класса в файл. Единственное исключение - то, если у Вас есть большое количество или очень простые небольшие классы, которые вся реализация тот же интерфейс и не должна изменять очень. Вы могли бы хотеть просто идти вперед и поместить их в один файл. Пользовательскими исключениями может быть хороший пример. Большую часть времени (по моему опыту), нет никакого кода кроме создания пользовательских сообщений или вещей той природы.
Пространства имен должны быть организованы сначала разделением проблем. Объекты данных должны быть в другом пространстве имен, чем объекты области, например. Затем у Вас мог бы быть меньший субдомен для каждой группы объектов на "совокупном корневом" уровне. Обычно, каждое из этих самых маленьких пространств имен соответствует своему собственному проекту и DLL.
Должно быть непосредственное отображение между классами и исходными файлами.
Пространства имен должны считаться пакетом, который может охватить один или несколько классов. Где возможный может быть полезно представить их как папки/просачиваться окно проекта Visual Studio.
При нахождении большого класса, Вы чувствуете, извлек бы выгоду из того, чтобы быть разделенным на отдельные файлы, затем вместо этого рассматривают рефакторинг и разделение самого класса.
(Приемлемым) исключением к этому является код, который генерирует UI, который Visual Studio помещает в отдельный файл. Я рекомендовал бы оставить это в его собственном файле и рассматривать его как прозрачный файл, находящийся в собственности редакторов как можно больше.
Что касается классов, я придерживаюсь правила Java: «Один открытый класс на файл» Я могу включить частный класс в общедоступный, если этот публичный класс является единственным пользователем. (Хотя перечисления делают это менее важным фактором); Однако, если он используется многими общедоступными классами в одном и том же пространстве имен, я помещу его в отдельный файл.
Я предпочитаю использовать пространства имен в следующих строках:
MyAwesomeApp.UI
MyAwesomeApp.Business
MyAwesomeApp.Data
, чтобы отразить разделение слоев.