Thread OOP Parameterübergabe direkt oder indirekt ? (21 answers)
Opened by der_thomas at 2014-04-26 00:16

rosti
 2014-04-27 08:45
#175076 #175076
User since
2011-03-19
3194 Artikel
BenutzerIn
[Homepage]
user image
Das sieht gut aus!!!

Verbessern kannst Du wohl immer irgendwas ;)
Zwei Dinge auf den ersten Blick:

Code (perl): (dl )
1
2
use strict;   # immer!
use IO::File;


IO::File importiert einige Konstanten wie O_RDONLY usw. was den Modus betrifft. Ist einfach schöner als "<" und "IO::File" inherits from "IO::Handle" and "IO::Seekable", z.B. hat Dein Handle damit die Methode getline().

Das Öffnen einer Datei prüfen, klar das haben wir alle mal gelernt, wir werden das immer machen und Du machst das auch. Du wirfst mit die() eine Exception, das ist im Grunde auch OK. die() zeigt jedoch auf die Zeile im Module, der Entwickler müsste also dort nachschauen, was da passiert ist. Eine Exception sollte auch auf die Zeile zeigen, wo die Ursache liegt, dazu:

Code (perl): (dl )
use Carp;


das ermöglicht einen sog. Backtrace. Und wie so oft, die Sache ist recht einfach:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package Trk_dict;

use IO::File;
use strict;
use warnings;
use Carp;

sub new{
   my $class = shift;
   # weitere Argumente verbleiben in @_
   my $file = shift;
   return eval{
      my $self = bless{}, $class;
      my $fh = IO::File->new;
      $fh->open($file, O_RDONLY) or croak "IO-Err open File '$file': $!";
      binmode $fh, ':utf8';
      # usw.
      $fh->close;

      $self; # letzte Zeile im eval-BLock, das ist der return-Valü
   };
}


Im der Anwendung dann so:

Code (perl): (dl )
1
2
 my $genre_objekt = Trk_dict->new('/path/file/rock_and_socks.bin') 
   or die $@;


Die Exception im Konstruktor (Datei gibts nicht) wird durchgereicht, was da psssiert ist, steht in $@ und aufgrund Carp::croak sieht der Entwickler den ganzen Verlauf der Exception mit Zeilennummern und Begründung. Er muss nicht ins Modul gucken.

Weitermachen, schönen Sonntag ;)
Last edited: 2014-04-27 08:46:43 +0200 (CEST)

View full thread OOP Parameterübergabe direkt oder indirekt ?