Dlaczego wybraliście C#?

Dlaczego wybraliście C#?
jarekczek
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Siemianowice Śląskie
  • Postów:500
0

Jako gratis, int w C# jest obiektem więc możemy zrobić sobie chociażby takie coś, java tak nie potrafi bo ma prymitywy :D:
5.ToString();

Genialne. Przekonaliście mnie. Warto programować w C# :)


Przeważnie ignoruję niezarejestrowanych użytkowników.
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
0
neves napisał(a):

Jako gratis, int w C# jest obiektem więc możemy zrobić sobie chociażby takie coś, java tak nie potrafi bo ma prymitywy :D:
5.ToString();

Niestety jest coś takiego jak Kotlin i wszystkie te lata rozwoju C# na nic się zdadzą:
5.toString();

http://ideone.com/WVOiu9

W Groovim i Scali też to działa...

jarekczek
Groovy i Scala to nie Java, więc trudno przekonywać kogoś, że Java jest lepsza od C#, bo Groovy... Napaliłem się niedawno na groovy, po czym odkryłem, że i tak pisać trzeba w Javie. Z różnych względów. Zresztą wiesz, nie ma co powtarzać tamtego wątku.
vpiotr
@jarekczek: Przecież to wątek o C# a nie o Javie
somekind
@vpiotr, no właśnie. Znowu wątek o C#, i znowu fanboje Javy powodowani zapewne jakimś bólem istnienia, próbują wykazywać wyższość Javy, mimo że nikt ich ani nie pytał, ani nie prosił.
Wibowit
Ten niby argument z toStringiem na incie miał być dowodem na to, że int jest obiektem, a przecież Kotlin jak i Scala kompilują się do Javowego bajtkodu, a w Javie int nie jest obiektem. Stąd sprzeczność - to, że można wywołać metodę na czymś nie znaczy że jest obiektem; wystarczy, że język ma odpowiedni cukier składniowy.
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około godziny
  • Lokalizacja:Wrocław
0
Wibowit napisał(a):

Jak widać da się zapakować inta (prymityw) w obiekt.

Ja nie twierdzę, że się nie da. Ja odnoszę się tylko do systemu typów. W C# jest jeden int, w Javie są dwa.

Panie somekindzie: nie znasz podstaw C# :]

:D :D :D

jarekczek napisał(a):

Genialne. Przekonaliście mnie. Warto programować w C# :)

Nikt tu nikogo do niczego nie przekonuje. Chcesz, to programuj, nie chcesz to nie programuj. Bądź dorosły!

vpiotr napisał(a):

Niestety jest coś takiego jak Kotlin i wszystkie te lata rozwoju C# na nic się zdadzą:

A u was biją murzynów! :D :D :D

jarekczek
Post na całą stronę, a treści tyci, tyci. Trzymaj fason, świeć przykładem :)
grzesiek51114
grzesiek51114
Post na całą stronę: Masz rozdzielczość z poprzedniej epoki? :P
jarekczek
Tak. Ale mam nagraną pracę, gdzie dostanę służbowego laptopa. I komórę.
somekind
Ech, kolejny troll na forum
Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:3 minuty
0

Widzę, że dalej nie ogarniacie C#. Przytoczyłem dokumentację Microsoftu, przykłady na inne zachowanie dużych i małych intów w C#, problemy z dużymi intami w C# na StackOverflow, a wy dalej powtarzacie bajeczki jak mantrę że nie ma dużego inta w C#.

Na razie nie mam specjalnie czasu, ale przetłumaczę wam dokumentację Microsoftu:
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/types/boxing-and-unboxing

Boxing is the process of converting a value type to the type object or to any interface type implemented by this value type. When the CLR boxes a value type, it wraps the value inside a System.Object and stores it on the managed heap. Unboxing extracts the value type from the object. Boxing is implicit; unboxing is explicit. The concept of boxing and unboxing underlies the C# unified view of the type system in which a value of any type can be treated as an object.

CLR konwertuje prymitywy (i inne typy wartościowe) na obiekty kiedy tego trzeba czyli np przy rzutowaniu inta na object.

Napiszcie mi której cześci dokumentacji Microsoftu nie rozumiecie.

Ja nie twierdzę, że się nie da. Ja odnoszę się tylko do systemu typów. W C# jest jeden int, w Javie są dwa.

W C# jest widoczny jeden, bo duży int w C# jest ukryty w sensie nie da się bezpośrednio odnieść do klasy dużego inta. Trzeba jednak pamiętać o tym, że istnieje taka klasa i że łatwo (nawet przypadkowo) zapakować inta w obiekt, bo duży int w C# zachowuje się inaczej niż mały int.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 2x, ostatnio: Wibowit
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około godziny
  • Lokalizacja:Wrocław
0

Ty trollujesz, czy taki nierozgarnięty jesteś? Nie ma żadnych dużych i małych intów w C#, to że w Javie coś jest zjeb*** dokumentnie, nie znaczy, że w C# też.

https://docs.microsoft.com/pl-pl/dotnet/csharp/language-reference/keywords/int

W C# jest widoczny jeden, bo duży int w C# jest ukryty w sensie nie da się bezpośrednio odnieść do klasy dużego inta.

WTF, że niby nie da się utworzyć instancji System.Int32?
http://ideone.com/jpcx1k

edytowany 2x, ostatnio: somekind
Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:3 minuty
0

Sam napisałeś, że int i Int32 to to samo i temu nie przeczę. Wytłumacz mi co powstaje po boxingu małego inta w C# i dlaczego unboxing da się zrobić tylko z zapakowanego inta.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 1x, ostatnio: Wibowit
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około godziny
  • Lokalizacja:Wrocław
0

int zapakowany w object

Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:3 minuty
0

No właśnie, A w Javie int zapakowany w Object nazywa się Integer. Więc jaka niby jest różnica?

Duży int jako osobna klasa musi istnieć w C# by można go było rozpakować. Jeszcze raz powtarzam - to, że nie da się dostać z poziomu składni do klasy dużego inta nie oznacza, że go nie ma.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 2x, ostatnio: Wibowit
Pixello
  • Rejestracja:prawie 10 lat
  • Ostatnio:4 miesiące
  • Lokalizacja:Podkarpacie
  • Postów:448
0
Wibowit napisał(a):

i dlaczego unboxing da się zrobić tylko z zapakowanego inta.

Ehm, unbox_any może zrobić unboxing z niezapakowanego inta XD

Dobra, wiem że wtedy po prostu clr to skipuje wtedy, ale jaki sens by miało robienie unboxingu z niezapakowanego inta?

edytowany 1x, ostatnio: Pixello
Wibowit
chciałem tylko zwrócić uwagę na to, że klasa dużego inta musi istnieć by można było go rozpakować
WeiXiao
  • Rejestracja:około 9 lat
  • Ostatnio:około godziny
  • Postów:5107
0

Co to jest duży i mały int?

Wibowit
int zapakowany i int niezapakowany. nie wydedukowałeś?
S9
w javie int to typ prymitywny a Integer to wrapper (obiekt)
Wibowit
zwał jak zwał
S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:5 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
0

@somekind: a jak jest z Optionalami w C#? :)


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
W2
  • Rejestracja:około 19 lat
  • Ostatnio:11 dni
1

int w C# to po prostu alias na System.Int32. Z kolei Int32 jest w C# strukturą(typem wartościowym ) dlatego przy rzutowaniu na object konieczny jest boxing bo object odnosi się do typów referencyjnych

Wibowit
thank you captain obvious. napisałeś to co już było tutaj napisane.
Pixello
  • Rejestracja:prawie 10 lat
  • Ostatnio:4 miesiące
  • Lokalizacja:Podkarpacie
  • Postów:448
0

A Int32 jest traktowany jako native int w CLR, więc nie jest zwykłą strukturą, weźcie sobie jakiś inny przykład ;Z

edytowany 1x, ostatnio: Pixello
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
1

Dajcie już spokój biednemu intowi, przecież są chyba ciekawsze zagadnienia w tym języku?

somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około godziny
  • Lokalizacja:Wrocław
3
Wibowit napisał(a):

No właśnie, A w Javie int zapakowany w Object nazywa się Integer. Więc jaka niby jest różnica?

Taka, że w przypadku C# internet nie jest pełen pytań o to jak skonwertować jedno do drugiego, bo jakieś API wymaga Integera, a my mamy int albo odwrotnie.
Posiadanie dwóch typów do przechowywania jednego rodzaju wartości jest zawsze konfundujące.

Duży int jako osobna klasa musi istnieć w C# by można go było rozpakować. Jeszcze raz powtarzam - to, że nie da się dostać z poziomu składni do klasy dużego inta nie oznacza, że go nie ma.

Nie oznacza, ale go nie ma. C# ma po prostu inny system typów, z podziałem na wartościowe i referencyjne, a nie prymitywy i obiekty.
Zresztą, int de facto dziedziczy z object w niejawny sposób. Tylko to szczegóły implementacyjne bez znaczenia dla użytkowników języka. Podobnie jak boxing i unboxing, nie pamiętam kiedy i po co miałbym tego ostatnio używać. Ale domyślam się, że w Javie to chyba najważniejsza rzecz, skoro tyle o tym piszecie.

scibi92 napisał(a):

@somekind: a jak jest z Optionalami w C#? :)

https://github.com/nlkl/Optional

A kiedy w Javie będą działające generyki? :P

vpiotr napisał(a):

Dajcie już spokój biednemu intowi, przecież są chyba ciekawsze zagadnienia w tym języku?

Tak w ogóle, to miał być wątek o wyborze języka, no ale fanatycy Javy nie usną jeśli nie udowodnią samym sobie po raz kolejny urojonej supremacji. ;)

Zobacz pozostały 1 komentarz
somekind
Tak, wyraziłem taką opinię, że Java jako język byłaby dla mnie krokiem wstecz. I co w związku z tym?
S9
No i część programistów Java zechciała z tym faktem dyskutować. Forum publiczne jest :)
somekind
No i to jest problem programistów Javy, że dyskutują z opiniami zamiast faktami, a faktów nie uznają.
S9
Źle się wyraziłem, chodzi o fakt że stwierdziłes tak, czyli o Twoją opinię.
somekind
No ok, tylko jaki jest sens dyskutować z tym, co dla mnie byłoby krokiem wstecz? :)
Ktos
Moderator
  • Rejestracja:prawie 23 lata
  • Ostatnio:około 12 godzin
0
scibi92 napisał(a):

@somekind: a jak jest z Optionalami w C#? :)

Ja nie somekind, ale odpowiem. Są.
Struktura System.Nullable<T> plus lukier składniowy w postaci int? x = null;.

Nawiasem, to teraz są dyskusje w celu wprowadzenia domyślnie typów nie-nullowalnych, tylko za bardzo niezbyt wiadomo jak to połączyć z kompatybilnością wsteczną :)

vpiotr
To byłaby gruba zmiana. W Kotlin masz ten sam lukier ale domyślnie typy są nie nulowalne. https://kotlinlang.org/docs/reference/null-safety.html
somekind
@Ktos, no ale Nullable to jednak daleko do Optionala.
n0name_l
Jest cuś takiego: https://github.com/louthy/language-ext co ma porobioną obsługę optionali i innych takich. Wydaje się całkiem ok.
Pixello
  • Rejestracja:prawie 10 lat
  • Ostatnio:4 miesiące
  • Lokalizacja:Podkarpacie
  • Postów:448
1

Po tym co zrobili w C#7 to lepiej niech więcej już cukrów składniowych nie robią :[.

Ktos
Na co konkretnie narzekasz?
Pixello
zmienna zostaje po if (someInherited is Base base) {} var base = xxx; //Compile error, wiem że to jest 'feature' żeby można było robić returna wewnątrz ifa i poza nim z niego korzystać, ale przecież tę sytuacje dałby rady roslyn wyciąć
Pixello
value tuples i składnia zwracania ich z funkcji, ktoś tego w ogóle w c# używa?
Pixello
funkcje lokalne w metodzie które są tak na prawdę starymi dobrymi displayclassami, niby upraszczają składnie, ale wprowadzają niepotrzbnie większą złożoność imho
Ktos
I <3 ValueTuple. Dekonstrukcję w szczególności. Funkcji lokalnych za to też nie rozumiem.
Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:3 minuty
0

Duży int w Javie używany jest głównie dlatego, że w Javie nie da się sparametryzować metody czy klasy generycznej małym intem - powtarzam to n-ty raz. Gdyby w C# też się nie dało to też wstawiliby dużego inta explicite - dla wygody. Obecnie duży int jest w C# schowany, by somekind go przypadkiem nie zobaczył.

Tylko to szczegóły implementacyjne bez znaczenia dla użytkowników języka. Podobnie jak boxing i unboxing, nie pamiętam kiedy i po co miałbym tego ostatnio używać.

A ja podałem linka do StackOverflow gdzie ktoś się naciął na boxingu w C#: https://stackoverflow.com/questions/6205029/comparing-boxed-value-types W "linked" i "related" są kolejne problemy C#-owców z boxingiem.

Ale domyślam się, że w Javie to chyba najważniejsza rzecz, skoro tyle o tym piszecie.

Hmm, a kto o tym pierwszy wspomniał i kto pluje jadem z tego powodu?


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 1x, ostatnio: Wibowit
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około godziny
  • Lokalizacja:Wrocław
0
Wibowit napisał(a):

A ja podałem linka do StackOverflow gdzie ktoś się naciął na boxingu w C#: https://stackoverflow.com/questions/6205029/comparing-boxed-value-types W "linked" i "related" są kolejne problemy C#-owców z boxingiem.

No tak, gość nie ogarniał boxingu, może nawet nie rozumiał czemu porównywanie referencji nie działa dla typów niereferencyjnych. Ale jaki to ma związek i czego to dowodzi? Javowcy też pytają na SO o boxing.

Hmm, a kto o tym pierwszy wspomniał i kto pluje jadem z tego powodu?

Ty, wczoraj o 23:53.

Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 4 godziny
1
Wibowit napisał(a):

Duży int w Javie używany jest głównie dlatego, że w Javie nie da się sparametryzować metody czy klasy generycznej małym intem - powtarzam to n-ty raz.

No, a dlaczego nie zrobili od początku jak jest w C#? ;-)

Gdyby w C# też się nie dało to też wstawiliby dużego inta explicite - dla wygody. Obecnie duży int jest w C# schowany, by somekind go przypadkiem nie zobaczył.

Generyków w C# na początku nie było. Pojawiły się w 2.0. I od razu można było je parametryzować intem.

int w C# to alias na System.Int32, o czym już wspomniano. jest to int „mały”, czterobajtowy, nieopakowany.
mimo to można nim parametryzować generyki i odpalać metody jak .ToString().
można inta zrzutować na object, co powoduje boxing. jednocześnie obiekt taki przestaje być zewnętrznie intem, jest tylko bezpłciowym objectem. choć nadal możemy na nim zrobić .ToString() i dostaniemy to samo.

dokładnego odpowiednika javowego java.lang.Integer w C# standardowo nie ma, bo nie ma takiej potrzeby. choć nikt nam nie broni takiej klasy napisać.

co ciekawe, platforma .NET obsługuje bezpośrednio boksowane typy wartościowe (niezdegenerowane do object), tylko ten ficzer nie jest dostępny w C#. dostępny jest za to w C++/CLI, w którym są:

  • „mały” int (alias System::Int32)
  • boksowany int (zrzutowany na System::Object), a także
  • boksowany int^ który zachowuje swą „intowość” a jednocześnie z poziomu C# jest widziany jako object.
edytowany 3x, ostatnio: Azarien
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 4 godziny
4

Dodam jeszcze, że „parametryzowanie generyka intem” w C# nie powoduje boxowania tego inta, nawet niejawnego, ani związanego z tym narzutu wydajnościowego i pamięciowego. int pozostaje intem.

edytowany 2x, ostatnio: Azarien
Zobacz pozostały 1 komentarz
Azarien
dałem przykład w poście niżej: var list = new List<int>();
N0
aha w ten sposób, czyli List<> jest generykiem.. kurde no racja przecież jest zawsze przy deklaracji new List<string> chociażby... boże ile ja się jeszcze muszę nauczyć... :) dzięki!
somekind
Wszystko, co przyjmuje parametry generyczne jest generyczne. ;)
N0
czyli Dictionary też
Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:3 minuty
0

Spróbuję jeszcze raz, może dotrze. Na przytoczonej przeze mnie dokumentacji Microsoftu https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/types/boxing-and-unboxing jest napisane:

The concept of boxing and unboxing underlies the C# unified view of the type system in which a value of any type can be treated as an object.

To, że typ wartościowy może być traktowany jako obiekt za pośrednictwem boxingu i unboxingu nie znaczy, że typ wartościowy jest obiektem de facto. Jest to tylko iluzja, "unified view". To "unified view" jest dla przykładu zaimplementowane w Scali - tam też jest jeden typ Int i w zależności od użycia jest małym lub dużym intem - konwersją zajmuje się automatycznie kompilator. Nie znaczy to jednak, że Scala przeskoczyła ograniczenia Javy. Mamy tylko cukier składniowy, bardzo przydatny zresztą.

A kiedy w Javie będą działające generyki? :P

Mam nadzieję, że tego nigdy nie skopiują z C#, bo moim zdaniem jest to totalnie niepotrzebne. Wystarczy możliwość parametryzowania metod i klas generycznych prymitywami i typami wartościowymi - wtedy zresztą popularność dużego inta w Javie mocno by spadła.

Wymazywanie typów w Javie pozwala na efektywną implementację dużo bardziej złożonego systemu typów w Scali niż w Javie czy C#. Jest to bardzo duża zaleta dla ludzi, którzy lubią zaawansowane języki programowania.

https://stackoverflow.com/questions/15081218/higher-kinded-types-why-possible-scala-but-not-f

No, a dlaczego nie zrobili od początku jak jest w C#? ;-)

Bo w momencie wprowadzania generyków C# był niszową zabawką, więc mogli sobie spokojnie zerwać kompatybilność wsteczną. Natomiast w tym samym momencie w Javce było już mnóstwo kodu naklepane i kompatybilność wsteczna była poważnym argumentem.

Równie dobrze, nawiązując do wypowiedzi @Ktos, można zapytać: czemu w C# od początku nie było typów nie-nullowalnych albo czemu teraz tego nie zmienią? Podobny dylemat co przy generykach.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 1x, ostatnio: Wibowit
aurel
Weź może załóż sobie własny wątek na ten temat, bo to już robi się nudne...
Wibowit
Oj przepraszam.
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 4 godziny
1
Wibowit napisał(a):

The concept of boxing and unboxing underlies the C# unified view of the type system in which a value of any type can be treated as an object.

To, że typ wartościowy może być traktowany jako obiekt za pośrednictwem boxingu i unboxingu nie znaczy, że typ wartościowy jest obiektem de facto. Jest to tylko iluzja, "unified view". To "unified view" jest dla przykładu zaimplementowane w Scali - tam też jest jeden typ Int i w zależności od użycia jest małym lub dużym intem - konwersją zajmuje się automatycznie kompilator. Nie znaczy to jednak, że Scala przeskoczyła ograniczenia Javy.

tylko że Scala boxuje sobie inty niejawnie kiedy jej trzeba, bo jest to narzucone przez JVM.
w .NET boxing zwykle nie jest potrzebny:

Kopiuj
var list = new List<int>();
list.Add(5); // tu nie ma boxingu
int i = list[0]; // tu nie ma unboxingu
string s = i.ToString(); // tu nie ma boxingu
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 4 godziny
3

Wracając do tematu; wybrałem C# a nie Javę bo Java była „wolnym oprogramowaniem” w zbyt dosłownym sensie, a IDE pożerały ogromne ilości pamięci. Visual zaś był w porównaniu z takim Eclipse'em lekkim edytorkiem.
Sam język sprawia też wrażenie przyjaźniejszego, mniej obarczonego uporem w rodzaju „nie będzie unsigned - nie bo nie”.
Mniejsza presja na zachowanie zgodności między wersjami pozwala na wprowadzanie do języka elementów których „się nie da” w Javie (tak jak „się nie dało” uniknąć type-erasure)

edytowany 1x, ostatnio: Azarien
MS
  • Rejestracja:ponad 10 lat
  • Ostatnio:około godziny
  • Postów:312
1

Ja również za bardzo C# nie wybierałem, został mi narzucony przez jeden z przedmiotów na uczelni. Spodobał mi się język oraz platforma i tak jakoś zostało. Wcześniej myślałem, że pójdę w C++ (w Turbo C++ 2006 też się przyjemnie formatki klepało), całe szczęście sprawy potoczyły się inaczej ;) W międzyczasie, gdy wyszedł Android, miałem też przygodę z Javą - szybko jednak się zakończyła. Miałem wrażenie, że w Javie, w porównaniu z C#, panował straszny burdel (tak nad int i Integer też się pamiętam głowiłem ;) Byłem jednak początkujący, więc wiele spraw pewnie po prostu nie rozumiałem. Zastanawiam się, czy gdybym dzisiaj rozpoczynał przygodę programowaniem i z C#, czy nie odniósłbym podobnego wrażenia jak wtedy z Javą. Jakby nie było C# również bardzo się rozrósł, przydałby by się jakiś C##, który trochę uporządkowałby składnię.


edytowany 6x, ostatnio: mstl
AJ
  • Rejestracja:prawie 18 lat
  • Ostatnio:5 miesięcy
  • Postów:66
1

Ja zaczynałem w assemblerze na Commodore C-64, w którym napisałem kilka rzeczy, które rozeszły się po całym świecie, ale było to we wczesnych latach 90-tych, później był assembler na Amidze i C (C++) na Amidze. Strasznie ciężko było mi przestawić się z myślenia assemblerem na myślenie w C++. Na PC bawiłem się w na początku w Delphi, w którym zrobiłem mała bazę pewnych danych dla swojej firmy (nic z tego nie miałem, a jedynie łatwiejszą pracę :) Zresztą nie był to jakiś wielki poważny program ), później była Java (nie jestem programistą, nie mam zamiaru na tym zarabiać, i ciągle tylko się bawię). Wymyśliłem sobie przeglądarkę grafik w Java. Chciałem zrobić drzewo folderów takie, jak jest standardowe w Windowsie (Pulpit na górze, pod nim Mój komputer itd)... Okazało się to nie możliwe. Gdzieś na jakimś forum wyczytałem, że tak sie nie da, bo Java jest przenośna, i na przykład pod Linuksem takie drzewo by nie zadziałało, więc w Java się nie da. A że mam w nosie jakiegoś tam linuksa, wolę mieć drzewo folderów, więc zacząłem w C++. Tu mnie z kolei odrzuciło od tych wskaźników, wskaźników na wskaźniki, operatorów wyłuskania, i wyłuskania z wskaźników i cholera wie z czego jeszcze :) Gdzieś przypadkowo trafiłem na C#. Myślałem wtedy, że to jakiś prosty język skryptowy albo opisowy jak HTML :) Kiedy jednak zacząłem się zagłębiać, coraz bardziej mi się podobał. Rzadko cokolwiek w nim robię, bo w zasadzie prawie wszystko już zrobili inni, ale czasem się bawię, i mi się podoba :)


--
Pozdrawiam.
Ajgor
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)