From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: * X-Spam-Status: No, score=1.2 required=5.0 tests=BAYES_00,FROM_WORDY, INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,47def5aa7b3182bd X-Google-Attributes: gid103376,public From: "Nick Roberts" Subject: Re: How to write TYPECASE in Ada 95? Date: 1999/02/19 Message-ID: <7aikfm$nhq$2@plug.news.pipex.net>#1/1 X-Deja-AN: 445932164 References: <79fct8$9k3$1@murdoch.acc.Virginia.EDU> <1103_918264881@DZOG-CHEN> <36cb2712.1390453@news.pacbell.net> <7ai3m2$4t0$1@nnrp1.dejanews.com> X-MimeOLE: Produced By Microsoft MimeOLE V4.72.3110.3 Organization: UUNET WorldCom server (post doesn't reflect views of UUNET WorldCom) Newsgroups: comp.lang.ada Date: 1999-02-19T00:00:00+00:00 List-Id: robert_dewar@my-dejanews.com wrote in message <7ai3m2$4t0$1@nnrp1.dejanews.com>... |tmoran@bix.com (Tom Moran) writes: |> Dispatching is certainly better than a case statement - |> if you use it. | |I strongly disagree with this statement. This particular |bit of conventional wisdom is badly in error, and can lead |to unnecessarily obscure hard to maintain programs. | |Case statements and dispatching represent two ways of |slicing a 2-D array of types vs operations. The use of |case statements may make it easier to add operations, the |use of dispatching may make it easier to add types. Which |is better depends on the particular situation. I believe I illustrated in a previous post the reason why using dispatching is sometimes 'overkill'. To recap briefly, imagine a large tree of types: T; Ta; Tb; Taa; Tab; Tba; Tbb; Taaa; Taab; Taba; Tabb; and so on. T is at the top. Ta and Tb are derived from T. Taa and Tab are derived from Ta. You get the picture. Now imagine a procedure P(X: in out T'Class) which contains a large number of lines of processing, and which has a slight variation in the middle just for the types Tabaab and Tbbaba, say. It only needs an 'if' or 'case', in the appropriate place, to distinguish these types and do the special actions for them. Now consider, instead, having P(X: in out T), and then having to overload this procedure for each and every type Ta, Tb, Taa, etc., etc.. Lots of types times many lines of code, most of which are all the same. Disastrous. Even if the fixed parts are factored out, you still have to declare lots of overloadings; it's just not worth it! Finally, consider a procedure Q(X: in out T) which performs an operation that has a substantially different implementation for each and every different type. Dispatching for procedure Q makes a lot of sense. Dispatching is very often an excellent approach. But, it is definitely not _always_ the best solution! ------------------------------------- Nick Roberts 'The time has come,' the Walrus said, 'To talk of many things: Of shoes--of ships--and sealing wax-- Of cabbages--and kings-- And why the sea is boiling hot-- And whether pigs have wings.' Lewis Carroll "Through the Looking Glass" -------------------------------------