Altersberechnung

Altersberechnung

am 03.10.2004 15:54:33 von Michael Rittweger

Hallo, allerseits!

Kann mir jemand sagen, was an folgender Routine falsch sein soll:

$t = strtotime($d);
$d1 = getdate($t);
$d2 = getdate();
$a = $d2[year] - $d1[year];
if (($d2[mon]<$d1[mon]) or (($d2[mon]=$d1[mon]) and
($d2[mday]<$d1[mday]))) $a = $a - 1;
return $a." (".$d.")";
} ?>

Das Ding wirft mir doch glatt heute (2004-10-03) aus:

37 (1966-03-20)

Und ich bin mir ziemlich sicher, daß ich im März 38 geworden bin... *g*
(Ende letzten Monats stimmte die Anzeige mit 38 auch noch.)

Die IF-Zeile sollte doch ergeben:

if ((10<3) or ((10=3) and (3<20)))
--> (false or (false and true))
--> if (false or false)
--> if (false)

Demnach dürfte $a=$a-1; nicht aufgerufen werden, außer in der Zeit vom 1.
Januar bis zum 19. März. Wird es aber. Warum? (Systemdatum stimmt, habe ich
bereits überprüft.) Der Übeltäter scheint das "true" im 3. Vergleich zu
sein.

Gruß, Michael

Re: Altersberechnung

am 03.10.2004 16:07:40 von Willi Marquart

"Michael Rittweger" wrote:

>Kann mir jemand sagen, was an folgender Routine falsch sein soll:
>
> if (($d2[mon]<$d1[mon]) or (($d2[mon]=$d1[mon]) and
^^^^^^^^^^^^^^^^^^^^
>($d2[mday]<$d1[mday]))) $a = $a - 1;
> return $a." (".$d.")";

Ich möchte nicht wissen, wieviele Jahrzehnte Fehlersuche die geniale
Idee, in IF-Abfragen Zuweisungen zuzulassen, schon verursacht hat.
Wenn "=" wenigstens ein Vergleich wäre, und ":=" eine Zuweisung...

Gruß Willi

Re: Altersberechnung

am 03.10.2004 17:14:18 von Ulf Kadner

Hallo Willi Marquart, Du schiebst hier am Sun, 03 Oct 2004 16:07:40 +0200:

> Ich möchte nicht wissen, wieviele Jahrzehnte Fehlersuche die geniale
> Idee, in IF-Abfragen Zuweisungen zuzulassen, schon verursacht hat.
> Wenn "=" wenigstens ein Vergleich wäre, und ":=" eine Zuweisung...

treffend formuliert! :-)

MfG, Ulf

Re: Altersberechnung

am 03.10.2004 17:52:18 von Simon Stienen

Willi Marquart wrote:
> Ich möchte nicht wissen, wieviele Jahrzehnte Fehlersuche die geniale
> Idee, in IF-Abfragen Zuweisungen zuzulassen, schon verursacht hat.

Ich möchte nicht wissen, wieviele Jahrzehnte umständlichen Codeschreibens
die geniale Idee, in IF-Abfragen Zuweisungen zuzulassen, schon gespart hat.

Und := ist Pfui Igitt -hass- -schüttel- Bleib mir mit Pascal bloss vom
Leib!
--
Simon Stienen
»What you do in this world is a matter of no consequence,
The question is, what can you make people believe that you have done.«
-- Sherlock Holmes in "A Study in Scarlet" by Sir Arthur Conan Doyle

Re: Altersberechnung

am 03.10.2004 18:00:57 von Niklas Schumann

Simon Stienen wrote:
>
> Ich möchte nicht wissen, wieviele Jahrzehnte umständlichen Codeschreibens
> die geniale Idee, in IF-Abfragen Zuweisungen zuzulassen, schon gespart hat.
>

? Find ich nicht!

> Und := ist Pfui Igitt -hass- -schüttel- Bleib mir mit Pascal bloss vom
> Leib!

Find ich auch nicht :-)

--
Fatal Error: Could not find "brain" in Line 2004

Re: Altersberechnung

am 03.10.2004 18:10:12 von Willi Marquart

Simon Stienen wrote:

>Und := ist Pfui Igitt -hass- -schüttel- Bleib mir mit Pascal bloss vom
>Leib!

Das hab ich 1968 bei meiner ersten Programmiersprache (Algol)
kennengelernt, da gab's Pascal noch gar nicht.

Gruß Willi

Re: Altersberechnung

am 03.10.2004 18:54:52 von Michael Rittweger

Hallo, Willi!

>> if (($d2[mon]<$d1[mon]) or (($d2[mon]=$d1[mon]) and
> Wenn "=" wenigstens ein Vergleich wäre, und ":=" eine Zuweisung...

Argl! Jaaa!!! *stirnpatsch*

JA, ich komm auch aus der Pascal-Welt und bin := für Zuweisungen gewohnt.
Das mit dem = statt == in Vergleichen ist mir schon öfter passiert. Diesmal
hab ich das echt total übersehen.

Danke!

> Gruß Willi

Gruß, Michael

Re: Altersberechnung

am 03.10.2004 19:41:56 von Simon Stienen

Niklas Schumann wrote:
> Simon Stienen wrote:
>>
>> Ich möchte nicht wissen, wieviele Jahrzehnte umständlichen Codeschreibens
>> die geniale Idee, in IF-Abfragen Zuweisungen zuzulassen, schon gespart hat.
>>
>
> ? Find ich nicht!
>
>> Und := ist Pfui Igitt -hass- -schüttel- Bleib mir mit Pascal bloss vom
>> Leib!
>
> Find ich auch nicht :-)

if ($res = mysql_query('...')) {
handlequeryresults($res);
mysql_free_result($res);
} else {
dir(mysql_error());
}

Wo wäre der Sinn, da "$res = mysql_query('...')" rauszureissen und dann
einen Check gegen $res zu machen, wenn $res eh in der Zeile direkt davor
zugewiesen wird? (Ok, genehmigt ist es für komplexe Ausdrücke, ggf.
kombiniert mit einer komplexen Condition.)
Solnge man nur diesen einen Befehl hat ist das ganz nett so.

Noch dazu ist if() ja ganz harmlos. Richtig mächtig wird eine Zuweisung
mitten in einer Condition, wenn man sie z.B. in einer while()-Schleife
benutzt.

_ICH_ zumindest will nicht darauf verzichten. (Und ich bin mir sicher ein
*extrem* hoher Anteil der anderen auch nicht - sonst wäre diese Eigenschaft
schon längst verschwunden... Nicht nur aus PHP, sondern auch aus C, C++,
Java, JavaScript und wo es sonst überall noch möglich ist.)


Thema 2: := / = vs. = / ==:
Man weist wesentlich häufiger Werte zu als dass man sie vergleicht. = ist
wesentlich schneller zur Hand als :=, wohingegen == nur unwesentlich länger
dauert als =.
Reicht nicht? Na gut:
Alle Vergleichsoperatoren bestehen aus zwei Zeichen oder haben ein zwei
Zeichen langes Äquivalent, während sie selbst nicht aus zwei Zeichen
bestehen können, weil sie verdoppelt schon als anderer Operator vergeben
sind:
a == b
a != b bzw. a <> b
a <= b (entspricht b > a)
a >= b (entspricht b < a)

<< und >> können nicht als Vergleichsoperatoren für "grösser als" bzw
"kleiner als" verwendet werden, da sie bereits für die Shifts vergeben
sind.
Hinzu kommen die traditionellen:
eq ==
ne !=
gt >
ge >=
lt <
le <=
Komisch. Auch wieder allesamt zwei Buchstaben.

Und ausserdem sind wir hier nicht in der Mathematik und brauchen doch
irgendwas, um uns vor den Mathematikern zu schützen...

Was das damit zu tun hat?

Ganz einfach: Drück einem Mathematiker mal einen Ausdruck in die Hand, wo
ihm mittendrin so ein süßes kleines
i = i + 1
ins Gesicht springt. :)
--
Simon Stienen
»What you do in this world is a matter of no consequence,
The question is, what can you make people believe that you have done.«
-- Sherlock Holmes in "A Study in Scarlet" by Sir Arthur Conan Doyle

Re: Altersberechnung

am 03.10.2004 20:12:11 von Simon Stienen

Willi Marquart wrote:
> Simon Stienen wrote:
>
>>Und := ist Pfui Igitt -hass- -schüttel- Bleib mir mit Pascal bloss vom
>>Leib!
>
> Das hab ich 1968 bei meiner ersten Programmiersprache (Algol)
> kennengelernt, da gab's Pascal noch gar nicht.
>
> Gruß Willi

Tja... Da war ich aber noch nicht mal in Planung. Ich kenne die Syntax
nunmal von Pascal her und handle entsprechend *meines* Kenntnisstandes
(alles andere wäre auch ziemlich kompliziert...)
--
Simon Stienen
»What you do in this world is a matter of no consequence,
The question is, what can you make people believe that you have done.«
-- Sherlock Holmes in "A Study in Scarlet" by Sir Arthur Conan Doyle

Re: Altersberechnung

am 03.10.2004 20:29:30 von Niklas Schumann

Simon Stienen wrote:

> a <= b (entspricht b > a)
> a >= b (entspricht b < a)

Achso

und wenn b = a, dann gilt b > a ncihtmehr...


--
Fatal Error: Could not find "brain" in Line 2004

Re: Altersberechnung

am 03.10.2004 20:50:19 von Simon Stienen

Niklas Schumann wrote:
> Simon Stienen wrote:
>
>> a <= b (entspricht b > a)
>> a >= b (entspricht b < a)
>
> Achso
>
> und wenn b = a, dann gilt b > a ncihtmehr...

Stimmt. Denkfehler.
Muss natürlich !(a > b) bzw !(a < b) sein. Entschuldigung.
--
Simon Stienen
»What you do in this world is a matter of no consequence,
The question is, what can you make people believe that you have done.«
-- Sherlock Holmes in "A Study in Scarlet" by Sir Arthur Conan Doyle

Re: Altersberechnung

am 03.10.2004 22:08:00 von l.willms

.. Am 03.10.04
schrieb simon.stienen@news.slashlife.de (Simon Stienen)
auf /DE/COMP/LANG/PHP/MISC
in eqtgf4e263yf$.dlg@news.dangerouscat.net
ueber Re: Altersberechnung


Ihr naht Euch wieder, schwankende Gestalten ....


SS> Und := ist Pfui Igitt -hass- -schüttel- Bleib mir mit Pascal bloss
SS> vom Leib!

Studierstube?

Habe nun, ach, ...


Mfg,
Lüko Willms http://www.mlwerke.de
/--------- L.WILLMS@jpberlin.de -- Alle Rechte vorbehalten --

"Regierung aus dem Volke, durch das Volk und für das Volk"
- Abraham Lincoln, Ansprache in Gettysburg, 19.11.1863
"... was in die revolutionäre Sprache von heute übersetzt heißt:
eine Regierung von Arbeitern, durch Arbeiter und für Arbeiter"
- Fidel Castro, November 1994

Re: Altersberechnung

am 04.10.2004 13:10:29 von Markus Malkusch

Simon Stienen:

> _ICH_ zumindest will nicht darauf verzichten.

Ich schon und benutze daher Exceptions.

> Nicht nur aus PHP, sondern auch
> aus C, C++, Java, JavaScript und wo es sonst überall noch möglich ist.)

Kannst Du anhand eines Beispiels erläutern wo so was in Java sinnvoll
eingesetzt wird? IMO gibt es keine Funktionen mehr, die für Ausnahmen 0
oder false zurückgeben, wenn man (wie bei Java) ein ordentliches
Exceptionmodell hat.
--
- Kontonummerprüfung mit PHP