eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingJaki język?Re: Jaki język?
  • Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
    From: Grzegorz Krukowski <r...@o...pl>
    Newsgroups: pl.comp.programming
    Subject: Re: Jaki język?
    Date: Fri, 26 Feb 2010 09:42:54 +0100
    Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
    Lines: 178
    Message-ID: <b...@4...com>
    References: <hlkh9u$9ji$1@nemesis.news.neostrada.pl> <hlkk0t$igp$1@news.task.gda.pl>
    <hlmbgj$g2t$1@nemesis.news.neostrada.pl> <hlmpjr$6m8$1@news.onet.pl>
    <4b7f001e$1@news.home.net.pl> <hm0p8r$o3h$2@news.agh.edu.pl>
    <hm63j0$ke6$1@news.onet.pl> <hm65ut$73v$1@solani.org>
    <hm6k2v$347$1@news.onet.pl> <hm6l56$6h7$1@solani.org>
    <i...@4...com> <hm7rrd$sb9$1@solani.org>
    NNTP-Posting-Host: ti0010a380-3653.bb.online.no
    Mime-Version: 1.0
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: 8bit
    X-Trace: inews.gazeta.pl 1267173778 23633 85.164.174.75 (26 Feb 2010 08:42:58 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Fri, 26 Feb 2010 08:42:58 +0000 (UTC)
    X-Newsreader: Forte Agent 5.00/32.1171
    X-User: registered.user
    Xref: news-archive.icm.edu.pl pl.comp.programming:185127
    [ ukryj 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

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: