Znowu drama wśród społeczności open source w .NET
Microsoft planuje dodać w ramach .NET 9 ich własny framework do obsługi zdarzeń (eventing framework) co wzburzyło autorów bibliotek open-source takich jak MassTransit, Wolverine, MediatR gdyż odebrali to jako konkurencja dla nich. A jak wiadomo, konkurować z Microsoftem ciężko. Można w zasadzie założyć, że nowa biblioteka stanie się de facto standardem w dniu jej publikacji.
Z jednej strony programiści mogą więc otrzymać dobry, dobrze udokumentowany framework z gwarancją wsparcia przez wiele lat. Z drugiej - zniechęca to społeczność open source do wychodzenia z własnymi inicjatywami i ogranicza dostępny wybór.
Cheering for the destruction of options because...?
https://aaronstannard.com/dotnet-eventing-backslide/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.
Steve Sanderson robi magię z Blazorem: pokazuje płynny hot reload aplikacji, nawet jeśli używamy Blazora jako komponent w aplikacji w React'cie (wtf), potem uruchamia w tej samej dotnetowej aplikacji kod Rusta, potem przerzuca ją na natywną aplikację na Windowsa, potem Androida i potem na iOS, a potem jeszcze na WPF (wtf2). Wszystko na jednym wdechu.
Do you build web UIs, API servers, or native desktop/mobile apps? Then .NET Core wants to give you more capabilities and productivity!In this demo-centric ta...
https://www.youtube.com/watch?v=lP_qdhAHFlgPosłuchaj mnie teraz bardzo uważnie:
OPTYMALIZACJA - bro! do you?
https://ostrapila.pl/67
#programowanie #dotnet #python #java #javascript #software #php #podcast #testowanie #polskipodcast #ostrapila
Wydajnie.
Ale masz na to jakieś testy?
To nowe planowane odcinki! Odcinki? Tak planujemy nagrać 10 nowe odcinki:
🌶 https://bit.ly/ostrapila-wydajnie
https://bit.ly/ostrapila-sprawdzam
#programowanie #dotnet #python #java #javascript #software #php #podcast #testowanie #polskipodcast #ostrapila
@Schadoow:
tak tak wszystko czego nie ma w .net to nisza
ja tego nie powiedziałem. A czy MQTT over QUIC to nisza czy nie można zweryfikować sprawdzając ile brokerów MQTT w ogóle to wspiera. Strzelam, że jakiś 1 na 10 (albo i nie). Oczywiście nie sprawdzałem.