in reply to Re: Re: This is why I use Perl
in thread This is why I use Perl

Example: first we set day to 30. All is well. Next we set month to 2. All is still well, except that the 30th of February isn't valid.

Let's do it the other way around: currently the month is set to 2. We try to set day to 30, but the system won't allow it, because the 30th of February isn't valid. We were going to set the month later, you bozo system!

Lesson to be learned: don't let the system do your thinking.

I don't like overzealous range testing for each individual field, in this example because the ranges themselves are interdependent. Having a get/set interface won't help one single bit.

Instead, I only want the system to check if the date is valid, when I'm trying to use the date (in case of a Javascript on a HTML form: when trying to submit the form). In perl, for often used checks, you still can have some speed boost by caching, either by checking if the date has changed since last time, before checking again, or some use of a Memoize cache on the function value.

Replies are listed 'Best First'.
Re^4: This is why I use Perl
by Aristotle (Chancellor) on Nov 09, 2003 at 11:43 UTC

    No, you don't. Check-when-setting is to check-when-using as a compile time check is to a run time check. We want as much as possible of the former, so we get alerted when the problem happens, rather than hours later when any connection to its source is lost.

    What you describe, however, is a case of a stupid interface. The problem you described occurs when you want to set several parts of the data structure, but the steps are checked for validity separately. The answer is there needs to be a way to signal that a series of changes is atomic. In this case, if you are doing this in Perl, it can be achieved very easily by offering a method like

    $foo->set_date( day => 30, month => 2 );

    Designing good interfaces is hard but very fundamental.

    Makeshifts last the longest.

Re: Re: Re: Re: This is why I use Perl
by podian (Scribe) on Nov 11, 2003 at 19:46 UTC
    the ranges themselves are interdependent.

    If fields are interdependent, don't you want to have a setter for all the fields, not just one field?