[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Różnice w wersjach PROGRESS'a
Coś cicho na liście, więc wrzucę moją przygodę ku przestrodze innym.
Właśnie przestawiam aplikacje z wersji 8.1 na wersję 9.0 Progress'a i
wyszedł mi taki kwiatek, nad którym straciłem trochę czasu by go
znaleźć Piszę to, by inni nie musieli szukać, jeśliby im to się zdarzyło.
Otóż kwiatek jest taki:
STRING(No,"Prawda/Nie")
- w wersji 8.1 daje "Nie" - długość 3 znaki
- w wersji 9.0 daje "Nie " - długość 6 znaków ("Nie" i trzy spacje
na końcu)
Długość zwracanego łańcucha jest taka, jak długość dłuższego z łańcuchów
reprezentujących poszczególne warości. Sprawdziłem jak to jest w wersji
7.3, bo taką mam - jest tak jak wersji 9.0.
W postaci "klinicznej" sprawa jest prosta, ale znaleźć to w aplikacji nie
było prosto. Otóż wynikało to z własnych "wynalazków", które w firmie PSC
są bardzo lubiane, a które zawsze mnie doprowadzały do szewskiej pasji,
czego wyraz dawałem już na tej liści i na konferencjach. Te wynalazki, to
przypisywanie znanym powszechnie pojęciom innego znaczenia, a z kolei
przypisywanie powszechnie znanym zjawiskom nowych nazw (dla
zainteresowanych służę przykładami). Wracając do powyższego kwiatka, to w
aplikacji były następujące zapisy (piszę tutaj w uproszczeniu, chodzi o ideę):
STRING(No,"Prawda/Nie") =
"Nie" - ma wartość True
LOOKUP(STRING(No,"Prawda/Nie"),"Prawda,Nie")<>0 - ma wartość False
Gdzie tkwi różnica, której na pierwszy rzut oka nie widać. Otóż w
Progress'ie operator porównania dla łańcuchów (=) działa tak, że:
"Nie" = "Nie" - daje True
"Nie" = "Nie " - daje też True, mimo dodatkowych znaków
spacji na końcu
"Nie " = "Nie" - daje też True, mimo dodatkowych znaków
spacji na końcu
Tutaj ciśnie się pytanie - to po co jest operator BEGINS ? Po co zmieniać
znaczenie operatora porównania, który w matematyce i wielu innych językach
znaczy to co znaczy ?
W przypadku LOOKUP oczywiście działa to inaczej, bo tam nie ma już
obcinania spacji z łańcucha zwracanego ze STRING() , których w wersji 8.1
nie było a w wersji 9.0 pojawiły się. Stąd właśnie mój kwiatek, bo w
wersji 8.1 oba wyrażenia dawały wartość True, zaś w wersji 9.1 drugie z
nich daje wartość False.
Pozdrawiam i życzę przyjemniejszych zajęć, niż szukanie takich kwiatków.
Henryk Jusza henju@pg.gda.pl
---------------------------------------------------------
Ośrodek Informatyczny Politechniki Gdańskiej
Pracownia Rozwoju Oprogramowania
tel (058) 347-28-01 fax (058) 347-24-63
------
Strona WWW: http://pluton.pol.lublin.pl/pugpl/index.htm
Obsluga listy: listserv@zeto.bydgoszcz.pl
Archiwum listy: http://www.zeto.bydgoszcz.pl/progress/index.html
------