>From a practical stand point I agree with Kostis.<br><br>When we started doing Erlang we used a lot of is_record/2 guards - that generally makes the code a lot harder to understand, so we dropped that as we threw away our imperative inheritance.<br>
<br>And the minute you need to take a parameter out of the record it will be done with the pattern matching anyway, which makes it easier to make changes in the code. <br><br>One learning here: try to do the pattern matching on fields only in the cases where it is used to pick between different function clauses. It makes it easier to figure out what is controlling the flow of execution and what is merely taken out of the parameters to be used as input elsewhere.  We had a lot of functions that pattern matched a lot of fields in a record, but only one of the fields were used to control the flow of execution. It was more clear to do a R#rec.field1 in the function code for the other fields. But it is a matter of style, of course...<br>
<br>Cheers,<br>Torben<br><br><div class="gmail_quote">2011/4/13 Håkan Mattsson <span dir="ltr"><<a href="mailto:hm@tail-f.com">hm@tail-f.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
When you discourage one way of writing code and claim that another way<br>
is better you ought to motivate why.<br>
<font color="#888888"><br>
/Håkan<br>
</font><div class="im"><br>
On Wed, Apr 13, 2011 at 12:36 PM, Kostis Sagonas <<a href="mailto:kostis@cs.ntua.gr">kostis@cs.ntua.gr</a>> wrote:<br>
> Gordon Guthrie wrote:<br>
>><br>
>> ...<br>
>><br>
>> Also check for bad input to functions by using guards like:<br>
>><br>
>> fun(A, B, C) when is_list(A), is_integer(B), is_record(C, recC) -><br>
><br>
> The following is a bit pedantic, but please do not offer use of the<br>
> is_record guard (esp. the one with arity two instead of three) as advice to<br>
> newcomers.  I suggest that you try to forget about this guard's existence;<br>
> the only place where this guard is possibly needed is in or/orelse contexts.<br>
><br>
> The above code is written better using pattern matching, as in:<br>
><br>
>  fun(A, B, #recC{} = C) when is_list(A), is_integer(B) -><br>
</div><div><div></div><div class="h5">_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br><a href="http://www.linkedin.com/in/torbenhoffmann">http://www.linkedin.com/in/torbenhoffmann</a><br>