Jetbrains opublikowało ciekawe wyniki ankiet na temat różnych technologii. Bardzo ciekawie wypada różnorodność stosowania różnych technologii i narzędzi w rzekomo pełnej alternatyw Javie i rzekomo pozbawionymi alternatyw dotnetowi. (Rzekomo, bo to argumenty używane w antydotnetowych dyskusjach przez Javowców właśnie.)
Rzeczywistość wygląda jednak nieco inaczej:
Jeszcze lepiej wygląda poziom zaawansowania w migracji do nowych wersji języka:
Źródła:
https://www.jetbrains.com/lp/devecosystem-2023/java/
https://www.jetbrains.com/lp/devecosystem-2023/csharp/
Blazor United coś nowego, ciekawie się zapowiada
A quick look at some of the experiments we're considering for Blazor in .NET 8
https://www.youtube.com/watch?v=48G_CEGXZZMWygląda mi na taki "old-new". Tzn nowa odsłona pomysłu który już był re-wymyślany wiele razy.
Chwale się dodałem pierwszy nugetPackage! Nazywa się LinqForTuples i pozwala grupować zmiennie zapomocą System.ValueTuples, i traktować je "Enumerable<T>". Wygenerowałem wszystkie rozszerzenia z System.Linq w wersji tuplowej. Efekt połączenia ich składni tuple i linq wygląda tak:
https://github.com/scInvest/LinqForTuples
//To działajacy kod w C#
var min = (1,2,4,5).Min();
var max = (1,2,4,5).Max();
//szybkie tworzenie tablic i innych kolekcji
var list = ("a", "b" , "c").ToList();
string[] ComboBoxOptions => ("Yes", "No", "Unknown").ToArray()
//wielokrotne sprawdzenia bez duplikacji
void Contains(User user)
{
return (NormalUsers, AdminUsers, BannedUser).Any(x => x.Contains(user));
}
//lub
if((x1 ,x2, y1, y2).All(pos => pos > 0))
//swipowanie zmiennych "od tak"
(x1,x2) = (x1,x2).Swipe(x1 > x2);
//wywołanie funkcji na wielu zmiennych
void DeleteAccount(User user)
{
(NormalUsers, AdminUsers, BannedUser).Apply(x => x.Remove(user));
}
//łaczenie pojedyczych zmiennych i ich kolekcji "Od tak"
int[] array = (1,2,4).ToArray();
int[] array2 = (4,5,6).ToArray();
var fiveOrMore = (10, 3, 12, array, array2).Many().Where(x => x > 5);
//stara składania dlatego samego zadania
var fiveOrMore = (new int[] { 10, 3, 12 }).Concat(array).Concat(array2).Where(x => x > 5);
I wiele wiele innych. Jeśli komuś się to podoba lub może przydać, to proszę o łapkę w górę.
Od odpowiadając Ci na pytania:
Skąd pomysł?
W firmie które pracuję piszemy soft graficzny. W teamie do którego mnie przenieśli zaskakująco wielu ludzi nie radzi sobie z relacjami "from-to", "begin-end". i duplikuje kod w paskudny sposób. Wiec pomysł z rodził się z potrzeby jednolinijkowego obrabiania/swipowania par danych. Napisanie stosownego kodu, wymagałoby tak wiele wysiłku, że szybciej było napisać generator, a mając generator można wygenerować wszystkie funkcje.
No fajne, ale jakie to ma zastosowanie?
Podzielę odpowiedz na 3 części
Syntatic sugar
dla przykładu C# ma aż dwa mechanizmy tworzenia kolekcji ze zmiennych w locie. Pierwszy to params
pozwalający przekazywać zmiennie jedna po drugiej, drugi to new Collection(){ zmienna1, zmienna2} - wywołujące metodę Add. To co ten pakiet robi, to de facto, pozwala uzywać podejścia, "Params like" dla dowolnej metody z IEnumerable<T>. Oraz tworzyć kolecje w locie. czyli łączy oba podejścia w jedno.Podobnie jest z łączeniem enumercji i pojedynczych zmiennych., w o wiele prostszy sposób(ostatni przykład w poście wyżej). czy redukcja "duplikujących się warunków w if’ach" które normalna składnia nie bardzo pozwala uprościć czytelnie i racjonalnym wysiłkiem czasu.
np zamiast if ( x1 > 0 && x2 > 0 && y1 .> 0 && y2 > 0)
można if((x1 ,x2, y1, y2).All(pos => pos > 0))
albo jeszcze lepiej if((x1 , x2 ,y1 ,y2).All(GreaterThenZero))
Ostatni przykład w linii jest tak maksymalnie deklaratywny, jak tylko się da. "Sztuczny" nakład ze strony języka redukuję sie do nawiasów i kropek.
lub (a,b,c).ToArray() też jest do granic możliwości deklaratywna, gdzie cały nakład ze strony jezyka to kropki i nawiasy.
Albo if( (arg1, arg2, arg3).AnyIsNull()) // nie pamiętam czy to publikowałem
, albo if( (arg1?.Property1, arg1?.Property2, arg1?.Property3).Any(x => x != null && arg1?.Property1 == expectedValue))
zamiast warunku na cały monitor.
Nie oszukujmy się ale każdemu się kiedyś odechciało sprawdzić nulle bo to za dużo roboty. BTW "bo to za dużo roboty" jest główną przyczyną dla której dodano do jezyka .?
które pozwala sprawdzić nulle niskim nakładem pracy i niskim kosztem dla czytelności(to nie moja opinia, tylko oficjalny statment, gościa który podejmował decyzje :P).
Wiec podsumowując pozwala na bardziej deklaratywny kod, mniejszym nakładem kliknięć i zachowując większą czytelność. Przynajmniej dla przypadków leżących w pewnej niszy.
Nie znam się na programach graficznych ani nie wiem, co to relacje begin-end i from-to, więc odniosę się do tego, co zrozumiałem. :)
No ok, z Twoją biblioteką ifa można uprościć do: if((x1 ,x2, y1, y2).All(pos => pos > 0))
. Ale bez niej będzie wyglądał tak: new[] { x1, x2, y1, y2 }.All(pos => pos > 0)
. To naprawdę niewiele znaków więcej, a przynajmniej dla każdego oczywiste. Ok, Twój kod wygląda nieco ładniej, ale sam nie wiem, czy wprowadzenie dodatkowej zależności do projektu jest tego warte. W moim przypadku prawdopodobnie nie, za mało mam takich operacji.
.Net CLI już jakiś czas temu dostało nową funkcjonalność, a mianowicie file watcher uruchamiany za pomocą polecenia dotnet watch
. Oprócz oczywistych zastosowań jak uruchamianie aplikacji po zmianach (teraz również z możliwością hot reload), mniej oczywistym zastosowaniem jest live unit testing- coś, co w Visual Studio jest dostępne tylko w wersji Enterprise. Wystarczy uruchomić polcenie dotnet watch test
. Jedyną wadą w porównaniu VS Enterprise jest oczywiście brak UI.
Pogodzę Was - zarówno autozapis jak i automatyczne odpalanie testów to patologia i gwałt na logice. ;)
Szukałem ostatnio jakiejś libki do operowania na wordzie. Trafiłem na NPOI, bo w sumie wysokie miejsce w nuget oraz fakt że nie trzeba płacić za nią miliony monet. Nie wiem, czy to fakt, że libka wywodzi się z apache, ale nazwy metod i zmiennych to chyba miłośnik skrótów opracowywał.
table.GetCTTbl().tblPr.AddNewTblLayout();
Jeśli ktoś jeszcze nie zna i interesuje go tematyka C# i .NET to polecam ten kanał na YouTube. Dużo materiałów na temat nowoczesnego C# w (w porównaniu do przeciętnego kontentu na YT) nienagannej formie.
@szok: nie używałem tej wtyczki natomiast jej licencja jest prawie taka sama jak dla VS czyli musisz płacić za używanie jej jak jesteś firmą z określonym dochodem :P