Wątek przeniesiony 2015-09-22 01:43 z Newbie przez furious programming.

Pascal - po co to komu? 9 pytań i stwierdzeń

0
Szczery Jacek napisał(a):

Dyskutujemy tu o blaskach i cieniach pascala, interesuje mnie jak programista pascala rozwiązałby ten sam problem i ile kodu musiałby napisać

No to mówię - wykorzystałby komponent do obsługi baz danych.
Ew. to co podsyła @spartanPAGE

0

Dla jasności, mamy tam listę (w pascalu chyba też są) obiektów klasy Person. Nie chodzi o zapytania do bazy danych

Patryk27 napisał(a):
Szczery Jacek napisał(a):

Dyskutujemy tu o blaskach i cieniach pascala, interesuje mnie jak programista pascala rozwiązałby ten sam problem i ile kodu musiałby napisać

No to mówię - wykorzystałby komponent do obsługi baz danych.
Ew. to co podsyła @spartanPAGE

Ponownie - gdzie tu wspomniano o jakichś bazach danych? Masz listę obiektów klasy Person. Tylko to.

0

Ale się gównoburza z tego tematu zrobiła. Chyba ktoś poruszył temat tabu na tym forum ;P

0

Ok, widzę że nie zostałem zrozumiany. To może tak:

class Person
{

public string name;

public int age;

public DateTime dob;

public Person(string name, int age, DateTime dob)

{

this.name = name;

this.age = age;

this.dob = dob;

}

}

Person p1 = new Person("Adam", 22, new DateTime(1992, 2, 5));

Person p2 = new Person("Tori", 19, new DateTime(1995, 10, 6));

Person p3 = new Person("James", 29, new DateTime(1985, 11, 2));

Person p4 = new Person("Sofi", 24, new DateTime(1990, 4, 10));

List<Person> personlist = new List<Person> { p1, p2, p3, p4 };

var orderednames = personlist.OrderBy(n => n.name.Length).Select(n => n.name);

 

Interesuje mnie dokładne przetłumaczenie tego kodu na pascala, a zwłaszcza ostatnia linia.

1

@Szczery Jacek - dobrze, w takim razie przetłumacz mi poniższą linijkę z Delphi na C#:

Memo.Lines.Delete(5);  //usunięcie szóstej linijki z tekstu komponentu

Memo to odpowiednik wieloliniowego TextBox; Życiowy przykład, ostatnio poruszany na forum; Czekam na propozycje.

0

Dziwne żądanie i na pewno nieżyciowe. TextBox, nawet wielolinijkowy to jeden ciąg tekstu. Nie widzę powodu aby dzielić go na wiersze, od tego jest listbox gdzie masz wydzielone linie. Tylko totalny newbie mógłby wpaść na pomysł żeby coś takiego robić. Przykład całkowicie niezyciowy, wybacz.

Natomiast operacje na kolekcjach danych to podstawowa sprawa i ciagle mi nie odpiwiedziałeś, jak to w końcu będzie w pascalu?

0

"tak myślałem" i co dalej?

0

Różnica jest taka, że ja pytam o coś co jest potrzebne a ty o coś co nie jest nikomu potrzebne do niczego

1

Nie uściśliłeś dialektu; W delphi prism z linq to objects będzie to wyglądało mniej-więcej tak:

var OrderedNames := From Person in Persons Order by Person.Name.Length Select Person.Name;
0

No ale zaraz, chwila. Jedną z zalet Delphi było tworzenie aplikacji natywnych, więc oczekuję kodu który skompiluje się do exeka natywnego. A nie delphi prism, który tworzy kod .net

0

No ale skoro tak się upieracie na delphi prism to jak tam będzie z tym usuwaniem linii z memo? Hehe

0

W sumie dałeś @furious programming ciekawy przykład. Powiedzmy mamy edytor tekstowy i chcemy programowo usunąć dany wiersz. W C# trzeba byłoby rzutować TextBox.Lines na liste, a z listy z powrotem na tablice string[] lecz to takie ładne nie jest. Zawsze można napisać archaiczną funkcje która zeruje wiersz i podnosi wszystkie wiersze poziom do góry. W sumie ciekawe czemu nie zrobili z TextBox.Lines listy ...

0

Bo to wbrew logice. Pole tekstowe jest tekstem a nie listą. Dostępne są operacje na tekście, także tym zaznaczonym.

A czy gdzieś w tekście są znaki nowej linii czy nie, to nie ma znaczenia. Pole tekstowe to i tak jeden ciąg tekstu.

0

Rozwiązanie nr 1: kompilowany .net, voila!
Rozwiązanie nr 2:

OrderedNames := MINQ.From(Persons.ClassInfo, Persons).OrderBy('Name.Length').Select('Name');
0

O tym MINQ nawet google nic nie wie :)

2

Nie jestem programistą delphi, dlatego zaprezentowałem przykład teorytycznego odzworowania linq (jako mocked internal queries :)), które by przeszło.

Samo LINQ nie ma brody. Więc o co chodzi? O prześciganie się w cukrze składniowym? Czy prezentowanie czegoś, co i tak ma zrobić baza danych?

0
spartanPAGE napisał(a):

Nie jestem programistą delphi, dlatego zaprezentowałem przykład teorytycznego odzworowania linq (jako mocked internal queries :)), które by przeszło.

Pogubiłem się, czyli wymyślasz sobie coś czego nie ma i podajesz jako rozwiązanie?

spartanPAGE napisał(a):

Samo LINQ nie ma brody. Więc o co chodzi? O prześciganie się w cukrze składniowym? Czy prezentowanie czegoś, co i tak ma zrobić baza danych?

Microsoft wprowadził linq 8 lat temu. Tak... nie ma brody, zastanów się co piszesz.

spartanPAGE napisał(a):

Czy prezentowanie czegoś, co i tak ma zrobić baza danych?

Co wy delphiarze tak z tą bazą danych? Fetysz jakiś? Chodzi o filtrowanie kolekcji obiektów. Nie wyobrażam sobie teraz życia bez tego.

Co do bazy, to tylko u was stosuje się "komponenty" i klepie tam kod sql, normalny świat korzysta z orm i mapuje tabele na klasy.

2

Co do bazy, to tylko u was stosuje się "komponenty" i klepie tam kod sql, normalny świat korzysta z orm i mapuje tabele na klasy.

Czyli nawet nie spojrzałeś do linku, który @spartanPAGE kilka razy podesłał.

2

Proof of concept. Kod jest pisany głównie dla ludzi i okazjonalnie dla komputerów. Ja nie jestem komputerem, a ty? Implementacja to rzecz do pominięcia na ten moment.

Chesz przykład z orm? To sobie jakiś wybierz i zajrzyj do jego snippetów.

0

Taa implementacja to rzecz do pominięcia bo sam sobie musisz zaimplementowac obsługę linq. No fakt, z takim argumentem nie można dyskutować, to jest dobra odpowiedź na każde pytanie.

0

Nosz to przecież tylko lukier składniowy.
Po co komu byłyby dwa odrębne języki, jeśli miałyby takie same feature'y? :|

A teraz Ty mi przetłumacz to na C# (składnia intelowska):

Var I: Integer;
Begin
  asm
    mov I, eax
  end;

  Writeln(I);
End;
0

W sumie, jakbym na przykład potrzebował 50000 zł to wiadomo, trzeba zarobić. A jak, to rzecz do pominięcia, gdy zarobię to będę miał.

0

No jak się zadaje pytanie na temat czegoś teoretycznie potrzebnego to się dostaje teoretyczną odpowiedź :)

To robota bazy danych, a na ten temat dostałeś link w dwóch kopiach i jedno przypomnienie

0
Patryk27 napisał(a):

Nosz to przecież tylko lukier składniowy.
Po co komu byłyby dwa odrębne języki, jeśli miałyby takie same feature'y? :|

A teraz Ty mi przetłumacz to na C# (składnia intelowska):

Var I: Integer;
Begin
  asm
    mov I, eax
  end;

  Writeln(I);
End;

Teraz to już się błaźnisz, używanie assemblera w kodzie kompilowanym pod .net? Jak już koniecznie chcesz, to możesz stworzyć natywną dll i jej użyć

0
spartanPAGE napisał(a):

No jak się zadaje pytanie na temat czegoś teoretycznie potrzebnego to się dostaje teoretyczną odpowiedź :)

To robota bazy danych, a na ten temat dostałeś link w dwóch kopiach i jedno przypomnienie

Perełka :)

0
Patryk27 napisał(a):

Nosz to przecież tylko lukier składniowy.
Po co komu byłyby dwa odrębne języki, jeśli miałyby takie same feature'y? :|

To po co komu delphi prism?

0
Szczery Jacek napisał(a):
Patryk27 napisał(a):

Nosz to przecież tylko lukier składniowy.
Po co komu byłyby dwa odrębne języki, jeśli miałyby takie same feature'y? :|

To po co komu delphi prism?

Po to co vb.net, IronPython, IronRuby, C++/cli i reszta ferajny

0

Po nic, dlatego to są trupy.

2
furious programming napisał(a):
Memo.Lines.Delete(5);  //usunięcie szóstej linijki z tekstu komponentu

Memo to odpowiednik wieloliniowego TextBox; Życiowy przykład, ostatnio poruszany na forum; Czekam na propozycje.

Komponenty GUI służą do wyświetlania danych, nie ich przechowywania ani operowania na nich programowo.
Jeśli chcesz zrobić coś na kolekcji stringów, to używasz klasy kolekcji, np. List<string>. Jeśli ma ona być źródłem danych dla jakiejś kontrolki GUI, to ją bindujesz przez jakieś BindingSource, wówczas zmiana w obiekcie, spowoduje też zmianę w komponencie GUI.
Robienie tego inaczej, np. poprzez bezpośrednie usuwanie wartości z kontrolki GUI to pisanie kodu spaghetti i łamanie dobrych praktyk.

spartanPAGE napisał(a):

Samo LINQ nie ma brody. Więc o co chodzi? O prześciganie się w cukrze składniowym? Czy prezentowanie czegoś, co i tak ma zrobić baza danych?

LINQ nie służy do operacji na bazie danych lecz na kolekcjach obiektów bez względu na ich źródło. Co prawda w różnych ORMach istnieją providery tłumaczące LINQ na kod SQL, ale to nie jest główne zastosowanie tej technologii.
Owszem, LINQ to cukier składniowy. Dzięki takim właśnie cukrom, kod jest znacznie krótszy, a co za tym idzie szybszy w napisaniu, a co ważniejsze, w czytaniu.

P.S. Żeby nie było - do Pascala czy tam Delphi nic nie mam, są mi zwyczajnie obojętne. Prostuję tylko złe praktyki i bzdury na temat C#, które tu piszecie.

0

Ja też nic nie mam do pascala ani delphi, ale już ten jeden przykład pokazuje, że delphi dalej tkwi głęboko zakorzenione w filozofii z lat 90 ubiegłego wieku. Takich kwiatków jak usuwanie bezpośrednie linii z textboxa jest na pewno więcej, a w dzisiejszych czasach stanowią one przykład jak nie należy pisać kodu.

No i potwierdziło się, że klepacze pascalowi w ogóle nic nie wiedzą o dobrych praktykach i wzorcach w programowaniu, jak jeden z drugim zobaczył słowo "select" to upiera się, że to jakieś głupoty bo "to robota komponentu bazy danych jest", pomimo że kilkakrotnie im przypomniano że nikt tu o żadnych bazach danych nie mówi.

Mogłem się nad wami jeszcze bardziej poznęcać i podać naprawdę skomplikowane zapytanie linq, z kilku kolekcji, gdzie analogiczny kod w delphi rozrósłby się do 100 linii zamiast jednej. No cóż, niepotrzebny " lukier składniowy' a implementacja to rzecz do pominięcia.

Nie wiem czy śmiać się czy płakać nad wami.

1 użytkowników online, w tym zalogowanych: 0, gości: 1