-
Data: 2010-02-26 08:42:54
Temat: Re: Jaki język?
Od: Grzegorz Krukowski <r...@o...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]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
Następne wpisy z tego wątku
- 26.02.10 09:14 lolo
- 26.02.10 12:27 jacem
- 26.02.10 12:39 Stachu 'Dozzie' K.
- 26.02.10 15:35 Grzegorz Krukowski
- 27.02.10 12:54 Jędrzej Dudkiewicz
- 27.02.10 13:56 jacem
- 27.02.10 14:05 jacem
- 27.02.10 16:01 Jędrzej Dudkiewicz
- 27.02.10 16:07 Arkadiusz Dymek
- 27.02.10 16:25 Grzegorz Krukowski
- 28.02.10 16:54 lolo
- 28.02.10 17:12 jacem
- 28.02.10 17:14 Mariusz Kruk
- 28.02.10 19:37 jacem
- 28.02.10 22:58 slawek
Najnowsze wątki z tej grupy
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
Najnowsze wątki
- 2025-01-20 Gdańsk => Programista Full Stack .Net <=
- 2025-01-20 Gliwice => Business Development Manager - Dział Sieci i Bezpieczeńst
- 2025-01-20 Warszawa => Full Stack .Net Engineer <=
- 2025-01-20 huta ruszyla
- 2025-01-20 piece wodorowe
- 2025-01-20 Lublin => Programista Delphi <=
- 2025-01-20 Warszawa => Architekt rozwiązań (doświadczenie w obszarze Java, AWS
- 2025-01-20 Mińsk Mazowiecki => Area Sales Manager OZE <=
- 2025-01-20 Bieruń => Spedytor Międzynarodowy (handel ładunkami/prowadzenie flo
- 2025-01-19 Test - nie czytać
- 2025-01-19 qqqq
- 2025-01-19 Tauron przysyła aneks
- 2025-01-19 Nowa ładowarka Moya a Twizy -)
- 2025-01-18 Power BANK z ładowaniem przelotowym robi PRZERWY
- 2025-01-18 Pomoc dla Filipa ;)