Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Stimmt diese Vereinfachung? (https://www.delphipraxis.net/113752-stimmt-diese-vereinfachung.html)

Die Muhkuh 14. Mai 2008 00:32


Stimmt diese Vereinfachung?
 
Hi,

ich steh grad auf dem Schlauch.

Ich hab folgendes PHP-Code:

Code:
if ($recognize_first_point) {
   if (!is_numeric($this->get_char()) && $this->get_char() != '.') {
      break;
   }
}
else if (!is_numeric($this->get_char())) {
   break;
}
Kann ich diesen hiermit vereinfachen:

Code:
if (!is_numeric($this->get_char()) && ($recognize_first_point && $this->get_char() != '.')) {
   break;
}

JasonDX 14. Mai 2008 00:49

Re: Stimmt diese Vereinfachung?
 
Ich glaube, das ist richtig:
Code:
if (!is_numeric($this->get_char()) && (($this->get_char() != '.') || !$recognize_first_point)
  break;
Deine Vereinfachung kann deshalb nicht stimmen, da die Bedingung immer false ist, wenn $recognize_first_point false ist; Das entspricht nicht der Ausgangsbedingung.

greetz
Mike

Die Muhkuh 14. Mai 2008 00:56

Re: Stimmt diese Vereinfachung?
 
Hi Mike,

ja, hab's auch gerade gemerkt. Aber die Vereinfachung bringt mir jetzt leider nichts mehr, da noch ein bisschen was dazugekommen und man die Vereinfachung nicht mehr durchführen kann.

Kurze Erklärung was passieren soll. Ich bastel nen kleinen Parser in php. Zuerst mal wird alles in Token zerlegt. Nun kommen im Text folgende Fälle vor (was der Scanner findet):

<Was gefunden wird> :arrow: <Rückgabe der Funktion>
  • 2 :arrow: 2
  • 2.00 :arrow: 2.00
  • 2. :arrow: 2.
  • 2..0 :arrow: 2.

Im Moment sieht das ganze so aus:

Code:
private function recognize_number($recognize_first_point) {    
     $tmp = '';
     $point_cnt = 0;
     while (true) {
       if ($recognize_first_point) {
          if (!is_numeric($this->get_char()) && $this->get_char() != '.') {
             break;
          }
          
          if ($this->get_char() == '.') {
             $point_cnt++;
          }
          
          if ($point_cnt > 1) {
             break;
          }
       }
       else if (!is_numeric($this->get_char())) {
          break;
       }
       
         $tmp .= $this->get_char();
        $this->inc_pos();
     }
     
     return $tmp;
  }
Da kann man bestimmt auch noch was vereinfachen. Mal sehen. Noch ist ja nicht aller Tage Abend :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz