Рефакторинг — это изменение кода без изменения его функциональности. После этого «рефакторинга» нельзя запустить функцию параллельно для двух разных аргументов так как данные теперь общие и статические.
С моей точки зрения метод слишком длинный => требует рефакторинга. Выведение всех полей в статики нехорошо не только по причине потокобезопасности, но и потому, что делает неочевидным входы и выходы каждого подметода. Я бы передавал/возвращал масивы явно.
Я так понимаю, что часть этого «Запретить...» относится только к госконторам? Или вы предлагаете наказывать всех кто напишет надстройку к MSO и будет ее продавать?
>>> Запретить ставить демо-версии МСО на ноуты и компы при покупке.
Именно дискриминировать конкретный вид ПО от конкретного производителя а не вообще все демоверсии?
Имхо, надо скорее пропихивать чтобы конкретные открытые стандарты работали для госучреждений (типа docx не принимаем, а odt принимаем)
посмотрите на продукты jetbrains. Там автоматизированный рефакторинг. Полностью автоматический вряд ли можно сделать — кто будет придумывать идентификаторы для методов и т.д.
Я думаю, если бы вы задонейтили свое время в опенсурс проект, сообщество бы получило больше (кстати, сколько чистого времени потрачено и, если не секрет, сколько бы вы за него получили при работе). Имхо ситуация изменится при массовости такого спроса, на который можно повлиять скорее качеством экосистемы, че единичными заявками.
А, я вижу, что вы используете знание о том, что колонка с именем последняя, а в остальных не может быт разделителя.
Ну как бы оно не было сделано, пока нет четкого соглашения о форматах надо каждый раз раскорячиваться — разбирать и собирать и для интересных колонок определять формат. Либо нагружать каждую конкретную команду еще и командами обработки — как например ls содержит себе sort, но только по выделенным атрибутам.
ну собственно пайп и есть синтаксических сахар для передачи парметров — просто этот параметр — имеет строго один тип — текстовая строка (куда надо рендерить внутриенние объекты, потом опять парсить, потом опять рендарить и т.д)
VersionInfo является чистой функцией от других свойств (ему надо слазит в файл и посмотреть на версию)
Если такие (вычисляемые по использованию) данные приемлемы, то как назвать совокупность этих вычислений и невычислемых данных? Я бы назвал объектом.
1. С точки зрения чистого разума, да в принципе можно было бы создать чистообъектный шелл чтобы любая команда была методом чего-то. Например сейчас copy частично дублирует функионал ls (выборка айтоемов по маске), но наверное, пошли на поводу у привычек. Объектно-логичнее было бы сделать вместо cp *.txt c:\x что-то типа (ls *.txt).cp c:\x или, если придумать какие-нибудь литералы для масок: *.txt | cp x
2. Собственно методы обычно не являются функционалом шелла и наследуются от дотнет. Фактически у нас есть мультипарадигмальность: используй команды, специально написанные для шелла, если их не хватает у тебя есть настощие объекты дотнет
CopyTo это специфичный для файлов способ копирования 1 файла унаследованный из .NET, Copy-Item это копирование общее для powershell причем оно может выполняться как групповая операция. Достаточно посмотреть на набор параметров, чтобы понять разницу.
Фактически это операции с разными сущностями — CopyTo копирует файл, Copy-Item копирует набор элементов. Просто может быть набор из одного элемента, и этот элемент — файл.
Powershell может использовать штатные утилиты (см ниже пример с Grep). Объекты это проще для использования, потому, что не надо ни на передающей стороне ни на принимающей определять формат данных — есть уже готовое соглашение. И перечень свойства тоже не обязательно явно указывать, если его не надо выводить.
пример (вывод 10 последних созданных файлов в CSV):
ls по умолчанию вообще не выводит CreationTime, но, тем не менее, я могу использовать это свойство. Мне никак не надо заботиться о формате данных (объяснять ls, что нужно дальше по пайпу).
>>> Запретить ставить демо-версии МСО на ноуты и компы при покупке.
Именно дискриминировать конкретный вид ПО от конкретного производителя а не вообще все демоверсии?
Имхо, надо скорее пропихивать чтобы конкретные открытые стандарты работали для госучреждений (типа docx не принимаем, а odt принимаем)
Ну как бы оно не было сделано, пока нет четкого соглашения о форматах надо каждый раз раскорячиваться — разбирать и собирать и для интересных колонок определять формат. Либо нагружать каждую конкретную команду еще и командами обработки — как например ls содержит себе sort, но только по выделенным атрибутам.
Если такие (вычисляемые по использованию) данные приемлемы, то как назвать совокупность этих вычислений и невычислемых данных? Я бы назвал объектом.
2. Собственно методы обычно не являются функционалом шелла и наследуются от дотнет. Фактически у нас есть мультипарадигмальность: используй команды, специально написанные для шелла, если их не хватает у тебя есть настощие объекты дотнет
BaseName ScriptProperty System.Object BaseName {get=if ($this.Extension.Length -gt 0){$this.Name.Remove($this.Name.Length — $this.Extension.Length)}els…
VersionInfo ScriptProperty System.Object VersionInfo {get=[System.Diagnostics.FileVersionInfo]::GetVersionInfo($this.FullName);}
Фактически это операции с разными сущностями — CopyTo копирует файл, Copy-Item копирует набор элементов. Просто может быть набор из одного элемента, и этот элемент — файл.
Пример:
в powershell объектах могут быть вычислимые свойства которые позволяют обрабатывать все объекты одинкаово:
ls | gm | ?{ $_.Name -match '^PS'}
Name MemberType Definition
— — —
PSChildName NoteProperty System.String PSChildName=@OpenWithToastLogo.png
PSDrive NoteProperty System.Management.Automation.PSDriveInfo PSDrive=C
PSIsContainer NoteProperty System.Boolean PSIsContainer=False
PSParentPath NoteProperty System.String PSParentPath=Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS\system32
PSPath NoteProperty System.String PSPath=Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS\system32\@OpenWithToastLogo.png
PSProvider NoteProperty System.Management.Automation.ProviderInfo PSProvider=Microsoft.PowerShell.Core\FileSystem
И почему объекты нарушают концепию пайпа а не расширяют ее?
пример (вывод 10 последних созданных файлов в CSV):
ls | sort CreationTime -Descending | select -First 10 | epcsv c:\test.csv
ls по умолчанию вообще не выводит CreationTime, но, тем не менее, я могу использовать это свойство. Мне никак не надо заботиться о формате данных (объяснять ls, что нужно дальше по пайпу).
Если отсутствие packange managers, то есть 3rd party: chocolatey.org/
и на этапе CTP находится OneGet github.com/OneGet/oneget/wiki/cmdlets
Если то, что PoSh не работает под юниксом, то так сразу бы и сказали :)