-
111. Data: 2010-02-25 15:05:00
Temat: Re: Jaki język?
Od: Andrzej Kmicic <d...@p...onet.pl>
Mif pisze:
> PHP to IMO koszmar potrafiący skutecznie zniechęcić do programowania nawet
> dużo starsze osoby. Choć może niektórym odpowiadać, choć osobiście go
> bardzo nie lubię.
A co takiego koszmarnego w PHP ?. PHP to nie tylko język do młócenia
stronek za 100 zł. To łatwy, szybki język skryptowy o bardzo
uniwersalnym zastosowaniu.
Wrzucę tu taka perełkę jaką znalazłem, no napisz to w innym języku tak
prosto w kilku linijkach. To tabelka tekstowa robiona z tablicy
dwuwymiarowej :
+-----+----+----------------------+
| Pos | No | Driver |
+-----+----+----------------------+
| 1 | 1 | Kimi Räikkönen |
+-----+----+----------------------+
| 2 | 2 | Felipe Massa |
+-----+----+----------------------+
| 3 | 22 | Lewis Hamilton |
+-----+----+----------------------+
| 4 | 4 | Robert Kubica |
+-----+----+----------------------+
function text_table($data) {
$keys = array_keys(end($data));
$size = array_map('strlen', $keys);
foreach(array_map('array_values', $data) as $e)
$size = array_map('max', $size,
array_map('strlen', $e));
foreach($size as $n) {
$form[] = "%-{$n}s";
$line[] = str_repeat('-', $n);
}
$form = '| ' . implode(' | ', $form) . " |\n";
$line = '+-' . implode('-+-', $line) . "-+\n";
$rows = array( vsprintf($form, $keys) );
foreach($data as $e)
$rows[] = vsprintf($form, $e);
return $line . implode($line, $rows) . $line;
}
pozdrawiam
AK
-
112. Data: 2010-02-25 15:45:33
Temat: Re: Jaki język?
Od: "Stachu 'Dozzie' K." <d...@g...eat.some.screws.spammer.invalid>
On 2010-02-25, Andrzej Kmicic <d...@p...onet.pl> wrote:
> Mif pisze:
>> PHP to IMO koszmar potrafiący skutecznie zniechęcić do programowania nawet
>> dużo starsze osoby. Choć może niektórym odpowiadać, choć osobiście go
>> bardzo nie lubię.
>
> A co takiego koszmarnego w PHP ?. PHP to nie tylko język do młócenia
> stronek za 100 zł. To łatwy, szybki język skryptowy o bardzo
> uniwersalnym zastosowaniu.
C też jest łatwym, szybkim językiem (kompilowanym akurat) o bardzo
uniwersalnym zastosowaniu. I wiesz co? Nie do wszystkiego jest używany.
> Wrzucę tu taka perełkę jaką znalazłem, no napisz to w innym języku tak
> prosto w kilku linijkach.
Może być Perl?
> To tabelka tekstowa robiona z tablicy
> dwuwymiarowej :
>
> +-----+----+----------------------+
> | Pos | No | Driver |
> +-----+----+----------------------+
> | 1 | 1 | Kimi Räikkönen |
> +-----+----+----------------------+
> | 2 | 2 | Felipe Massa |
> +-----+----+----------------------+
> | 3 | 22 | Lewis Hamilton |
> +-----+----+----------------------+
> | 4 | 4 | Robert Kubica |
> +-----+----+----------------------+
>
> function text_table($data) {
> $keys = array_keys(end($data));
> $size = array_map('strlen', $keys);
> foreach(array_map('array_values', $data) as $e)
> $size = array_map('max', $size,
> array_map('strlen', $e));
> foreach($size as $n) {
> $form[] = "%-{$n}s";
> $line[] = str_repeat('-', $n);
> }
> $form = '| ' . implode(' | ', $form) . " |\n";
> $line = '+-' . implode('-+-', $line) . "-+\n";
> $rows = array( vsprintf($form, $keys) );
> foreach($data as $e)
> $rows[] = vsprintf($form, $e);
> return $line . implode($line, $rows) . $line;
> }
A fuj, jakie brzydkie spaghetti.
#v+
sub text_table {
my ($two_dim_table) = @_;
my ($position, $number, $driver);
format STDOUT_TOP =
+-----+----+----------------------+
| Pos | No | Driver |
+-----+----+----------------------+
.
format STDOUT =
| @>> | @> | @<<<<<<<<<<<<<<<<<<< |
$position, $number, $driver
+-----+----+----------------------+
.
for my $r (@$two_dim_table) {
($position, $number, $driver) = @$r;
write;
}
}
#v-
--
Secunia non olet.
Stanislaw Klekot
-
113. Data: 2010-02-25 19:46:39
Temat: Re: Jaki język?
Od: Andrzej Kmicic <d...@p...onet.pl>
Stachu 'Dozzie' K. pisze:
> On 2010-02-25, Andrzej Kmicic <d...@p...onet.pl> wrote:
>> Mif pisze:
>>> PHP to IMO koszmar potrafiący skutecznie zniechęcić do programowania nawet
>>> dużo starsze osoby. Choć może niektórym odpowiadać, choć osobiście go
>>> bardzo nie lubię.
>> A co takiego koszmarnego w PHP ?. PHP to nie tylko język do młócenia
>> stronek za 100 zł. To łatwy, szybki język skryptowy o bardzo
>> uniwersalnym zastosowaniu.
>
> C też jest łatwym, szybkim językiem (kompilowanym akurat) o bardzo
> uniwersalnym zastosowaniu. I wiesz co? Nie do wszystkiego jest używany.
>
>> Wrzucę tu taka perełkę jaką znalazłem, no napisz to w innym języku tak
>> prosto w kilku linijkach.
>
> Może być Perl?
>
>> To tabelka tekstowa robiona z tablicy
>> dwuwymiarowej :
>>
>> +-----+----+----------------------+
>> | Pos | No | Driver |
>> +-----+----+----------------------+
>> | 1 | 1 | Kimi Räikkönen |
>> +-----+----+----------------------+
>> | 2 | 2 | Felipe Massa |
>> +-----+----+----------------------+
>> | 3 | 22 | Lewis Hamilton |
>> +-----+----+----------------------+
>> | 4 | 4 | Robert Kubica |
>> +-----+----+----------------------+
>>
>> function text_table($data) {
>> $keys = array_keys(end($data));
>> $size = array_map('strlen', $keys);
>> foreach(array_map('array_values', $data) as $e)
>> $size = array_map('max', $size,
>> array_map('strlen', $e));
>> foreach($size as $n) {
>> $form[] = "%-{$n}s";
>> $line[] = str_repeat('-', $n);
>> }
>> $form = '| ' . implode(' | ', $form) . " |\n";
>> $line = '+-' . implode('-+-', $line) . "-+\n";
>> $rows = array( vsprintf($form, $keys) );
>> foreach($data as $e)
>> $rows[] = vsprintf($form, $e);
>> return $line . implode($line, $rows) . $line;
>> }
>
> A fuj, jakie brzydkie spaghetti.
> #v+
> sub text_table {
> my ($two_dim_table) = @_;
>
> my ($position, $number, $driver);
>
> format STDOUT_TOP =
> +-----+----+----------------------+
> | Pos | No | Driver |
> +-----+----+----------------------+
> .
> format STDOUT =
> | @>> | @> | @<<<<<<<<<<<<<<<<<<< |
> $position, $number, $driver
> +-----+----+----------------------+
> .
>
> for my $r (@$two_dim_table) {
> ($position, $number, $driver) = @$r;
> write;
> }
> }
> #v-
>
Może byc perl ale Nie tak łatwo, nazwy kolumn bane są z nazw kluczy
tablicy asocjacyjnej. A szerokości kolumn ustalane są dynamicznie w
zaleznosci od tresci !!!.
AK
-
114. Data: 2010-02-25 20:04:54
Temat: Re: Jaki język?
Od: "Stachu 'Dozzie' K." <d...@g...eat.some.screws.spammer.invalid>
On 2010-02-25, Andrzej Kmicic <d...@p...onet.pl> wrote:
>> A fuj, jakie brzydkie spaghetti.
>> #v+
>> sub text_table {
>> my ($two_dim_table) = @_;
>>
>> my ($position, $number, $driver);
>>
>> format STDOUT_TOP =
>> +-----+----+----------------------+
>> | Pos | No | Driver |
>> +-----+----+----------------------+
>> .
>> format STDOUT =
>> | @>> | @> | @<<<<<<<<<<<<<<<<<<< |
>> $position, $number, $driver
>> +-----+----+----------------------+
>> .
>>
>> for my $r (@$two_dim_table) {
>> ($position, $number, $driver) = @$r;
>> write;
>> }
>> }
>> #v-
> Może byc perl ale Nie tak łatwo, nazwy kolumn bane są z nazw kluczy
> tablicy asocjacyjnej. A szerokości kolumn ustalane są dynamicznie w
> zaleznosci od tresci !!!.
Sądzisz że to dużo trudniejsze będzie? Twoja funkcja-perełka w PHP jest
po prostu brzydka i jest bardzo fajnym przykładem na myślenie typowego
PHP-owca: nieeleganckie spaghetti, które się naprawdę źle czyta, gościu
uważa za perełkę. Dlaczego? Bo działa?
--
Secunia non olet.
Stanislaw Klekot
-
115. Data: 2010-02-25 20:16:17
Temat: Re: Jaki język?
Od: Grzegorz Krukowski <r...@o...pl>
On Thu, 25 Feb 2010 20:04:54 +0000 (UTC), "Stachu 'Dozzie' K."
<d...@g...eat.some.screws.spammer.invalid> wrote:
>Sądzisz że to dużo trudniejsze będzie? Twoja funkcja-perełka w PHP jest
>po prostu brzydka i jest bardzo fajnym przykładem na myślenie typowego
>PHP-owca: nieeleganckie spaghetti, które się naprawdę źle czyta, gościu
>uważa za perełkę. Dlaczego? Bo działa?
Wiesz, nie znając ani PHP, ani Perla, to jego PHPowy kod rozumiem w
dużym stopniu ,,od ręki'' a Twojego w Perlu (optycznie elegantszego,
nie przeczę) ni w ząb. Co innego czytelność dla osoby znającej idiomy
danego języka, a co innego czytelność ogólna. I jeżeli to jest
czytelny program w Perlu to już się boję, jak wygląda nieczytelny ...
--
Grzegorz Krukowski
-
116. Data: 2010-02-25 21:51:01
Temat: Re: Jaki język?
Od: "Grzegorz Niemirowski" <g...@p...onet.pl>
Grzegorz Krukowski <r...@o...pl> napisał(a):
> Wiesz, nie znając ani PHP, ani Perla, to jego PHPowy kod rozumiem w
> dużym stopniu ,,od ręki'' a Twojego w Perlu (optycznie elegantszego,
> nie przeczę) ni w ząb. Co innego czytelność dla osoby znającej idiomy
> danego języka, a co innego czytelność ogólna. I jeżeli to jest
> czytelny program w Perlu to już się boję, jak wygląda nieczytelny ...
@P=split//,".URRUU\c8R";@d=split//,"\nrekcah xinU / lreP rehtona tsuJ";sub
p{
@p{"r$p","u$p"}=(P,P);pipe"r$p","u$p";++$p;($q*=2)+=
$f=!fork;map{$P=$P[$f^ord
($p{$_})&6];$p{$_}=/
^$P/ix?$P:close$_}keys%p}p;p;p;p;p;map{$p{$_}=~/^[P.
]/&&
close$_}%p;wait until$?;map{/^r/&&<$_>}%p;$_=$d[$q];sleep
rand(2)if/\S/;print
--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 15 days, 23 hours, 49 minutes and 43 seconds
-
117. Data: 2010-02-26 07:05:17
Temat: Re: Jaki język?
Od: "Stachu 'Dozzie' K." <d...@g...eat.some.screws.spammer.invalid>
On 2010-02-25, Grzegorz Krukowski <r...@o...pl> wrote:
> On Thu, 25 Feb 2010 20:04:54 +0000 (UTC), "Stachu 'Dozzie' K."
><d...@g...eat.some.screws.spammer.invalid> wrote:
>
>>Sądzisz że to dużo trudniejsze będzie? Twoja funkcja-perełka w PHP jest
>>po prostu brzydka i jest bardzo fajnym przykładem na myślenie typowego
>>PHP-owca: nieeleganckie spaghetti, które się naprawdę źle czyta, gościu
>>uważa za perełkę. Dlaczego? Bo działa?
>
> Wiesz, nie znając ani PHP, ani Perla, to jego PHPowy kod rozumiem w
> dużym stopniu ,,od ręki'' a Twojego w Perlu (optycznie elegantszego,
> nie przeczę) ni w ząb. Co innego czytelność dla osoby znającej idiomy
> danego języka, a co innego czytelność ogólna.
Jego "czytelność ogólna", jak to nazwałeś, to użycie tego, czym PHP
akurat nie wyróżnia się na tle innych języków imperatywnych i można by
*to samo* zapisać tak w Perlu, jak w C, Javie, Rubym i Pascalu. Tylko
dlatego jest czytelniejsze dla ciebie. A przecież nie o to chodzi żeby
ograniczać się do wspólnej części wszystkich możliwych języków.
No i co ci przyjdzie z faktu, że osoba w ogóle nie znająca danego języka
być może zrozumie kod, o ile przebije się przez gąszcz pętli
i instrukcji warunkowych? Czy będzie się to pisać i konserwować
wygodniej?
> I jeżeli to jest
> czytelny program w Perlu
Nie. To nie jest czytelny program w Perlu. To jest coś na szybko
sklecone do wypisania tabelki. A i tak jest bardziej eleganckie od
przytoczonej funkcji w PHP.
> to już się boję, jak wygląda nieczytelny ...
--
Secunia non olet.
Stanislaw Klekot
-
118. Data: 2010-02-26 08:42:54
Temat: Re: Jaki język?
Od: Grzegorz Krukowski <r...@o...pl>
On Fri, 26 Feb 2010 07:05:17 +0000 (UTC), "Stachu 'Dozzie' K."
<d...@g...eat.some.screws.spammer.invalid> wrote:
>Jego "czytelność ogólna", jak to nazwałeś, to użycie tego, czym PHP
>akurat nie wyróżnia się na tle innych języków imperatywnych i można by
>*to samo* zapisać tak w Perlu, jak w C, Javie, Rubym i Pascalu. Tylko
>dlatego jest czytelniejsze dla ciebie. A przecież nie o to chodzi żeby
>ograniczać się do wspólnej części wszystkich możliwych języków.
Tak, jest czytelniejsze bo zapisj jest podobny jak w wielu innych
językach.
Tak, nie o to chodzi aby wykorzystywać tylko podstawowe instrukcje
języka, ale zaawansowane możliwości można zapisywać czytelniej lub
nie. Akurat Perl, jak widzę robi to w wariancie mniej czytelnym, tj.
bez przeczytania opisu języka jest mi trudno zrozumieć o co chodzi.
>
>No i co ci przyjdzie z faktu, że osoba w ogóle nie znająca danego języka
>być może zrozumie kod, o ile przebije się przez gąszcz pętli
>i instrukcji warunkowych? Czy będzie się to pisać i konserwować
>wygodniej?
Widzisz, ja nie jestem zawodowym programistą i też w takim środowisku
się obracam. I w tym środowisku dużo osób pisze sobie programy które
coś robią. Ba, 20 lat po odejściu autora program jest często jedynym
źródłem wiedzy *jak* coś zrobić (mój ulubiony przykład - program
napisany w 84 w Fortranie, po norwesku, w ABB, wysłany do mojej
obecnej firmy po wycięsiu wszystkiego czego nie powinniśmy wiedzieć, w
95 roku dopiero przenieciony na PC. No i teraz zadanie: uaktualnić go
do obecnych realiów ;)). I jeżeli będzie wykorzystywał zbyt
zaawansowane sztuczki to nikt poza osobami znającymi dobrze język nie
wyciągnie z programu żadnej informacji. A tak da się zrozumieć
algorytm, mniej więcej co gdzie jest robione i po krótkim
samoszkoleniu się można podjąć próbę zmian.
Tak więc to co jest wadą z punktu profesjonalistów / bardzo
zaawansowanych użytkowników niekoniecznie jest prawdą na niższym
poziomie.
A na koniec oba warianty (bardziej proceduralnie i skondensowania a'la
Perl) w Pythonie. Który wariant i w jakim języku jest najbardziej
cztelny to już pozostawiam czytelnikom.
# -*- coding: utf-8 -*-
#+-----+----+----------------------+
#| Pos | No | Driver |
#+-----+----+----------------------+
#| 1 | 1 | Kimi Räikkönen |
#+-----+----+----------------------+
#| 2 | 2 | Felipe Massa |
#+-----+----+----------------------+
#| 3 | 22 | Lewis Hamilton |
#+-----+----+----------------------+
#| 4 | 4 | Robert Kubica |
#+-----+----+----------------------+
def RobTabelke(
naglowek,
danetabeli,
margines
):
""" Funkcja generuje gotową tabelkę.
WEJŚCIE:
naglowek - krotka z opisem kolumn
danetabeli - lista z krotkami opisującymi kolejne wiersze
tabeli
margines - krotka opisująca ile spacji należy należy wstawić
aby uzy-
skać optyczny marines między treścią a
obramowaniem tabelki
WYJŚCIE:
łańcuch znaków z tabelką
"""
danejakotekst = \
[naglowek] + \
map(
lambda nrwiersza, wiersz: \
( unicode(nrwiersza), ) + \
tuple([ unicode(kolumna) for kolumna in wiersz ]),
xrange(1, 1 + len(danetabeli)),
danetabeli
)
szerokosckolumn =\
[
max([ len(x[idkol]) for x in danejakotekst ])
for
idkol in xrange(len(danejakotekst[0]))
]
separatorwierszy = \
u"+" + \
u"+".join(
[
u"".center(szerokosckolumn[idkol]+2*margines[idkol],
u"-")
for
idkol in xrange(len(szerokosckolumn))
]
) + \
u"+"
wynik = \
separatorwierszy + u"\n" + \
( separatorwierszy + u"\n" ).join(
[
u"|" + \
u"|".join(
[
"".center(margines[idkol]) + \
wiersz[idkol].ljust(szerokosckolumn[idkol]) + \
"".center(margines[idkol])
for
idkol in xrange(len(wiersz))
]
) + \
u"|\n"
for
wiersz in danejakotekst
]
) + \
separatorwierszy
return wynik
def DrukujTabelkeJakWPerlu(danetabeli):
""" Funkcja drukuje gotową tabelkę.
WEJŚCIE:
danetabeli - lista z krotkami opisującymi kolejne wiersze
tabeli
"""
NAGLOWEK="""+-----+----+----------------------+
| Pos | No | Driver |
+-----+----+----------------------+"""
WIERSZ="""| %-3d | %-2d | %-20s |
+-----+----+----------------------+"""
def Licznik(StanPoczatkowy):
wartosc=StanPoczatkowy
while True:
yield wartosc
wartosc+=1
print NAGLOWEK
licznik=Licznik(1)
for wiersz in danetabeli:
print WIERSZ % ( (licznik.next(), )+wiersz )
if __name__=="__main__":
margines = ( 1, 1, 2 )
naglowek = ( u"Pos", u"No", u"Driver" )
tabelka = \
[
( 1, u"Kimi Räikkönen" ),
( 2, u"Felipe Massa" ),
( 22, u"Lewis Hamilton" ),
( 4, u"Robert Kubica" )
]
print RobTabelke(naglowek,tabelka,margines)
print ""
DrukujTabelkeJakWPerlu(tabelka)
--
Grzegorz Krukowski
-
119. Data: 2010-02-26 09:14:09
Temat: Re: Jaki język?
Od: lolo <n...@n...com>
>> Java/Javowate - no, nieźle, nieźle... Java Script jest w miarę prosta
>> - ale co można pisać w tym? Tzn. co można pisać, co będzie atrakcyjne
>> dla 10-latka?
>
> flash ;)
>
> za tydzień będzie robił banery
> po miesiącu będą animowane kodem
> po pół roku będą już powstawały gry oparte o OOP
w innym wątku podałem jeszcze
http://www.flashdesigner.pl/edukacja/
http://www.flashdesigner.pl/edukacja/srodekdydaktycz
ny.php
ale to raczej do zabawy w szybkie efekty wizualne a sama rodzinka flash
rozrosła się w międzyczasie dość znacznie (flex, air, haxe) i w sporej
części bazuje na darmowych bibliotekach/środowiskach/kompilatorach - do
wyboru, do koloru - do zabawy, ale i do nauki całkiem porządnego
programowania (oop/patterns)
-
120. Data: 2010-02-26 12:27:44
Temat: Re: Jaki język?
Od: "jacem" <j...@1...pl>
Użytkownik "lolo" <n...@n...com> napisał w wiadomości
news:4b879114@news.home.net.pl...
>>> Java/Javowate - no, nieźle, nieźle... Java Script jest w miarę prosta - ale
>>> co można pisać w tym? Tzn. co można pisać, co będzie atrakcyjne dla
>>> 10-latka?
>> flash ;)
>> za tydzień będzie robił banery
>> po miesiącu będą animowane kodem
>> po pół roku będą już powstawały gry oparte o OOP
> w innym wątku podałem jeszcze
> http://www.flashdesigner.pl/edukacja/
> http://www.flashdesigner.pl/edukacja/srodekdydaktycz
ny.php
> ale to raczej do zabawy w szybkie efekty wizualne a sama rodzinka flash
> rozrosła się w międzyczasie dość znacznie (flex, air, haxe) i w sporej części
> bazuje na darmowych bibliotekach/środowiskach/kompilatorach - do wyboru, do
> koloru - do zabawy, ale i do nauki całkiem porządnego programowania
> (oop/patterns)
A fuj!