wtorek, 26 lutego 2013

Struktury

Poprzednio został poruszony temat tablic, teraz przejdziemy do czegoś, z czego słynie programowanie obiektowe - struktury i klasy (ok, struktury, klasy potem opisze)

 Czym jest struktura?

Struktura jest swego rodzaju kontenerem na dane, mieści w sobie różne typy danych (w przeciwieństwie do tablicy), oraz wyróżnia się sposobem dostępu.

zobaczmy przykładowy kod
 (nie zwracajcie uwagi na słowo "public", struktury to rozgrzewka przed klasami, i tam się tym zajmę dokładniej)

 To jest przykładowa struktura,a teraz spróbujmy coś z nią zrobić

Rezultat ostateczny:
Tak wiem, akurat poruszona kwestia uprawnień jest trochę bez sensu, ale chodzi o przedstawienie struktur

Dwie rzeczy cechujące dodatkowo struktury w C#:
  • Mogą posiadać konstruktor
  • Mogą dziedziczyć interfejsy (ale nie same siebie! struktura nie może dziedziczyć z innej struktury)
  • Pola struktury nie mogą być inicjowane (tj. np. "new int[5]"), jeżeli nie są typu const, lub static
  • Struktura nie może posiadać domyślnego, bezparametrowego konstruktora
Konstruktory opiszę również w klasach, a dziedziczenie raczej jako część drugą klas :)

Tablice

Tablice to najprostsze kontenery danych, dostajemy się do nich przez podanie indeksu elementu
Istota tablic:

Oto jak je deklarujemy (przykład z int):
oto jak możemy je wypełnić:
 podczas deklaracji: po zadeklarowaniu: oraz jak się do nich odnosimy:
etc.

Ok, a może ktoś chce zapytać po co są te tablice? Po co wgl. przejmować się takim zapisem dla danych?

Wyobraźmy sobie aplikacje, która symuluje elektroniczny dziennik klasy (gimnazjum czy coś...) Teraz zobaczcie ten kod i zobaczcie, że jest on dużo bardziej funkcjonalny.

Plusy:
  • możemy zapytać użytkownika, i udzielić mu prawidłowej odpowiedzi
  • możemy przeszukiwać w pętlach daną wartość (to później)

Minusy:
  • tablice muszą mieć ściśle określoną ilość elementów
  • indeks tablicy nie zawsze mówi nam, jakiej wartości możemy się pod nią spodziewać
  • tablice przechowują dane jednego, i tego samego zadeklarowanego dla niej typu
A co z innymi rodzajami tablic? Co z tablicami 2D 3D 4D ...
Do tej pory opisywałem najtrywialniejsze z możliwych tablic - jednowymiarowe, jednak tematem koniecznym jest zapoznanie się z tablicą dwuwymiarową


Czym to się w zasadzie różni? Jedynie sposobem deklaracji i odwołania się do tablicy. To jak je wykorzystamy zależy od nas, czy będzie to tablica 3x3 do gry w kółko i krzyżyk, czy może będziemy pisać algorytm do rozmieszczenia statków (to chyba tablica 9x9? ;) )


Pominę tematykę Jagged Arrays (tablicy tablic / tablic zagnieżdżonych), ponieważ osobiście preferuję posługiwanie się listami, jeżeli jednak ktoś będzie nalegał to i o tym zrobię artykuł
Ciekawostka na koniec:
  • Wymiary tablic to sztuczne wyrażenie wytworzone na potrzebę ich obrazowania, tak naprawdę tablica w pamięci jest ulokowana ciągiem, przykład z debugger'a (początkujący nie muszą tego rozumieć, mogą jednak rzucić okiem na wynik w górnym oknie ignorując kod, górne okno przedstawia reprezentacje tablicy w pamięci PC).


środa, 20 lutego 2013

Betony programistyczne

SPOILER: Chyba najbardziej nerdowski wpis ;)

Trzeba czasem odpocząć od odgrzewania tego samego kotleta, chwila dla programistycznych demotów

Wstępnie:

Jak to wchodząc na facebook'a możecie zobaczyć tone nowych obrazków z pier...liarda coraz to demotywatoro-podobnych stron tak i w programowaniu znajdą się podobne źródła, np. codecrap czy jakiś profil w stylu tego profilu

Kilka perełek, które znalazłem (oczywiście to nie tylko C#)



Mój faworyt, zapewne od zwolnionego programisty, który w projekcie zostawił niespodzianke :D




CSS ;)

Do tego coś czego mi sie nie chce wklejać:
"return 42;"

Jak ktoś nie rozumie ocb. z liczbą 42 -> wikipedia :)








wtorek, 19 lutego 2013

Kontenery

Nie, nie chodzi o kontenery na śmieci (chociaż jeżeli programista napisze program używając ich zbyt wiele to w sumie i takie sie trafią).

Kontenery danych są wymaganym do omówienia elementem, bowiem istota programowania polega nie tyle, co na zwykłych zmiennych, ale także na umiejętnym używaniu ich zbiorów

Typy kontenerów:
  • tablice
  • listy
  • struktury
  • klasy
  • unie
etc.

Typów jest bardzo dużo, Ja omówię tylko te najważniejsze

W kolejnych wpisach (w kolejności): tablice -> struktury -> klasy -> listy

Ciekawostka: W C# nie występują wektory, zamiast nich stosujemy listy

niedziela, 17 lutego 2013

Parsowanie tekstu

Parsowanie / Parsing / Parser - kwestia "wydłubywania" informacji z kodu, np. wyciąganie z kodu HTML informacji o autorze strony.

Za pomocą masowych operacji na stringach można takie informacje wyciągać budując dość ciekawe programy, jeżeli wiecie czym jest program do kanałów RSS - to jest właśnie taki parser wiadomości.

Stworzyłem ten wpis ponieważ jest on małym subwpisem dla zmiennych String, chciałem nieco to zobrazować :)
Na wyjściu mamy:
17 : 02 : 1991

Oczywiście jeżeli ktoś uważniej czytał poprzedni temat o Stringach i ruszył głową:

To tak o parsowaniu w pigułce :)

Zmienne #3: Typ Float - zmiennoprzecinkowe liczby

Dobra powrót po sesji (a później opijaniu i lenistwie - też jestem człowiekiem ^^) Każdy kto słyszał o problemach z porównywaniem liczb zmiennoprzecinkowych zapewne czuje nieco temat.

Pierwsze, na co trzeba zwrócić uwage - nie wszystkie liczby zmiennoprzecinkowe mogą zostać idealnie odzwierciedlone przez komputer w postaci binarnej, tak więc możemy spodziewać się bugów.

Proof:
Ile a powinno wynosić? A no nie więcej niż 0.06, a jednak debugger pokazuje 0.0600000024. BEEEEEEEP! Właśnie delikatnie popsułem Ci humor, w końcu mogło by to byś bardziej bajeczne no nie? :)
Sprawdźmy inny przykład: asum = 0.9999907

Oczywiście nie zawsze tak jest, sporo zależy od kompilera z jakiego korzystamy, aczkolwiek założenie, że każdy błąd naprawi za nas jest niepoprawne, i 100% w tym przypadku błędne!!!

Jak z tym walczyć? Co się tak na prawdę dzieje?
Typ float traci panowanie nad sobą, gdy przekraczana jest wartość jej precyzji, następują wtedy zaokrąglenia (które czasem nie mają sensu)

I tak sobie myślę: utnijmy ten szalejowy koniec

Co prawda jest to mało estetyczna metoda, ale: Nareszcie zwraca normalny wynik, czyli 1.0 ;)

Nie uważam tej metody za dobrą, nie wiem czemu (może wygląda zbyt banalnie?), aczkolwiek póki działa nie będę rozpaczał :)

Zmienne #2: Typ String - łańcuch znaków

Odnośnie stringów nie będzie tu filozofi, mam zamiar pokazać podstawowe kody, które pomagają na nich operować. Temat jest dość zbędny, przyda się go przeczytać dopiero wtedy kiedy programista zostanie zmuszony do skorzystania z nich :)

Jeżeli ilość kodu wydaje się wam spora, jeżeli wpis nieciekawy, nie ma problemu - możecie przejść do kolejnego, bo tak jak napisałem - detale poniżej są wymagane raz na jakiś czas

Kopiowanie string'ów do tablicy char'ów (string to char[]) = CopyTo
Sprawdzanie czy dany string kończy się daną literą / ciągiem znaków - EndsWith Identycznie działa metoda StartsWith
Porównywanie stringów - Equals Nie muszą to być oczywiście cyfry w łańcuchu
Enumeracja char'ów
Wyciąganie indeksu elementu. indexOf
DieKitty - metoda Insert
Ostatnie wystąpienie - LastIndexOf
Długość string - Length
Zamiana znaków - Replace
Rozdzielanie łańcucha - Split
Wyszukiwanie tekstu w tekście - Substring
Rozdzielenie do tablicy charów - ToCharArray
Usuwanie prowadzących białych miejsc - Trim Chodzi o usunięcie spacji po lewo i po prawo ;) Podając wartość dla Trim można usunąć inne wartośći.
Mniej istotne:
- ToUpper, wszystkie litery z dużej
- ToLower, wszystkie litery z małej
- TrimStart / TrimEnd, patrz opis Trim

niedziela, 3 lutego 2013

Zmienne #1: Typ całkowity

W zasadzie cała magia typów całkowitych opiera się na określeniu ich rozmiaru, wiadomo, że można wszędzie pisać int, i program będzie działać, ale architektura systemów pozwala nam się wykazać tu ponad to czego uczą w pierwszym lepszym technikum

PRIMO!

Ta tabela zawiera wszystkie typy całkowite, oraz ich zasięg
Note: przedrostek 's' oznacza, że zmienna może przyjąć wartości poniżej zera, redukując jej zasięg wartości "na plusie"

Dla czego jest to istotne? Załóżmy, że tworzysz program, taki jak, np. Excel, albo coś związanego z położeniem geograficznym, a wtedy musisz wiedzieć jaki typ zmiennej dopasować dla danej funkcji (w klasach właściwie mówi się na to "metoda")


To nie wszystko, bo można dodatkowo operować na strukturach dotyczących typu całkowitego, np.

Int64 jest strukturą przechowującą liczbe, nie prostym typem!
Co prawda nie istnieje Long64, ponieważ jako typ liczbnowy w C# long jest typem o największej pojemności

Zmienne

Programowanie bez zmiennych, jest jak matematyka bez znaku równości

Wyróżniamy 3 typy zmiennych:

Typy proste
Typy złożone
Typy wskaźnikowe
- Dotyczą niemal wszystkiego, ale wskaźniki zostawimy na potem

Kolejne kilka tematów poświęcę omówieniu każdego z typów zmiennych, zrobię to dokładnie i szybko, ponieważ zmienne są dość istotne, ale nie warto poświęcać 12 godzin na ich zrozumienie, jeżeli kolejne wpisy nie będą tego wymagać

sobota, 2 lutego 2013

Hello World

Nie wiem, czy to prawidłowa decyzja, ale postaram się prowadzić blog tak jak kogoś za rękę urozmaicając go o jakieś specyficzne rzeczy podczas rozwoju (używanie klasy http etc.)

Na razie podstawy :)


piątek, 1 lutego 2013

ASP.NET vs PHP

Tak więc wracam do bloga z kolejnym wpisem, który zapowiedziałem poprzednio.
Tym razem dotyczy ASP.NET i PHP

Postarałem się dokonać dokładnej analizy każdego języka pod względem jego funkcjonalności, nie będąc jednocześnie stronniczym, aczkolwiek z naporem na obalenie mitu o równości tych języków.

 ASP.NET
- Bazowany na C# / Visual Basic
- Język kompilowany
- .NET, MVC, Entity, Web Pages, Web Forms Framework + Razor engine
- Platforma: Windows Server / Linux
- Wielkość projektu nie wpływa znacznie na czytelność kodu, np. DotNetNuke CMS
- Open Source
- Data wydania: 2002
- Stale rozwijana
- Przyciąga uwagę w CV
- Dla korporacji (50-50)
- System plików NTFS / Linux (MonoDevelop)


PHP
- Składnią najbliżej C++
- Język interpretowany
- Lista frameworków
- Platforma: Linux / Windows Server
- Im większy projekt tym mniej czytelny kod, np. PHPBB3 czy Joomla! CMS
- Open Source (link)
- Data wydania: 1995
- Standard niemal każdego CV WebDev'a
- W celach ogólnych
- System plików Unix / Windows

Paradygmaty ASP.NET i PHP

ASP.NET:

PHP:
Frameworki:
ASP.NET posiada chyba wszystkie wymagane framework'i (nie jestem WebDev'em więc mi wystarczają), natomiast PHP dla usprawnienia działania wymaga dodatkowych framework'ów.
 Nie zapominajmy, że PHP to język opensource'owy - nie tutaj wsparcia ze strony twórców, a jedynie od źródel z sieci. W PHP wspiera się społeczność

Platformy:
Odnośnie pracy na poszczególnych platformach trzeba rozważyć na jakiej maszynie został skonfigurowany serwer. Dobrze jest, gdy serwer unika obciążenia spowodowanego nakładką graficzną (dostęp do takiego serwera można uzyskać za pomocą Shella). Z racji na możliwość kompilacji własnego jądra dla systemów z rodziny UNIX wydajniejszym wyjściem wydaje się zastosowanie systemu Linux, lecz sam system nie jest decydującym w porównaniu ASP.NET z PHP - nawet najlepiej skonfigurowany system nie uczyni danego języka szybszym (zwłaszcza przy porównywaniu języka kompilowanego z interpretowanym, oraz posiadającego możliwość multithreadingu).

Popularność dwóch danych języków jest bardzo spora, lecz tutaj PHP osiąga lepsze rezultaty w postaci ilości maszyn na jakich jest zainstalowany. Wiele stron takich jak Facebook czy Twitter korzystają z wielu języków jednocześnie (tworząc własne kompilacje PHP korzystając jednocześnie z takich języków jak 'D') by ominąć wady pojedyńczych rozwiązań.Przeznaczenie języków
ASP.NET jest szczególnie przystosowany do na prawdę sporych stron (i tam radzi sobie lepiej od PHP).