It was great to skip type-checking in Flash at times, but the runtime was
also strongly typed.  Also, JS was not a practical language for Flash.  It
is more risky to do skip type-checking in Royale for JS.  These new cars
with lane warnings are a rough analogy.  They only let you be less
attentive on nice new painted highways.  Flash's runtime wouldn't let you
make type mismatches so it effectively had lane lines.  JS is a road
without lane lines.  A ValueObject keeps your eyes on the road.  An ounce
of prevention is better than a pound of cure.

IMO, you might be better off writing a bead that you can pass a JSON
object and it will generate the AS class for you to copy from the
clipboard and paste into a file.  Then you could guess at the types.  That
wouldn't require compiler changes and would encourage early prevention.

Just an idea,
-Alex

On 2/5/18, 9:39 AM, "Gabe Harbs" <[email protected]> wrote:

>Yeah. That’s what you’ve argued in the past, and in a pure world you’d be
>right.
>
>However, I’d prefer the option to be practical when dealing with more
>data types. Being forced to fiddle with properly typed objects *always*
>is too confining IMO. What I personally ended up doing when dealing with
>APIs and the like was the make sure to quote everything in my app rather
>than declare VOs even though finding all the instances were a pain.
>
>I think it’s pretty common for folks to use untyped objects *especially*
>when dealing with APIs in classic Flex apps. It seem overly draconian to
>make that a requirement for Royale.
>
>Part of the attraction of ActionScript has been that it’s *optionally*
>typed. Minification in JS makes the optional typing pretty weak.
>
>> If you don't care about SWF support, you can quickly make ValueObjects
>> just for the compiler.
>
>Quickly? I’m not sure how.
>
>My $0.02.
>Harbs
>
>> On Feb 5, 2018, at 7:28 PM, Alex Harui <[email protected]> wrote:
>> 
>> IMO, your proposal sort of defeats the purpose of ActionScript and
>>Royale,
>> which is to provide a type system at compile time.  Not only should you
>> want to address your JSON fields, but you should want to have them
>> type-checked, and that you spelled the field name correctly.  Otherwise,
>> the compiler is going to also allow you to mistype:
>> 
>> var name = myProps["nme"];
>> 
>> 
>> And there will be no errors.  And similarly:
>> 
>> var myObj:Object = {
>>  nme: "foo",
>>  age : 30.1415
>> }
>> 
>> Will be allowed when it probably shouldn't.  And also, you could then
>>use
>> myObj when you intended to use myOtherObj and nobody will know until you
>> try to debug in JS.
>> 
>> 
>> If you don't care about SWF support, you can quickly make ValueObjects
>> just for the compiler.  In ASDoc, the ValueObject is never instantiated.
>> It is just like a typedef for the compiler.
>> 
>> HTH,
>> -Alex
>> 
>> On 2/5/18, 8:43 AM, "Gabe Harbs" <[email protected]> wrote:
>> 
>>>> JSON Objects are not destroyed.
>>> 
>>> Yeah. I know, but untyped js literals are pretty much useless in
>>>minified
>>> Royale apps.
>>> 
>>>> Propose a way to determine that a data structure
>>>> is external and what the compiler should generate and implement it.
>>>> IMO,
>>>> the answer is to create ValueObjects.  That is essentially typedefs
>>>>and
>>>> AFAIK, there is no way to automate typedef generation.
>>> 
>>> I already made a suggestion once:
>>> 
>>> For untyped Objects, the compiler could convert dot notation to bracket
>>> notation.
>>> 
>>> The other half of that would be to convert all object literals to
>>> “quoted” literals automatically.
>>> 
>>> So if I have a function:
>>> 
>>> function parseMyJson(json:String):Object{
>>>     return JSON.parse(json);
>>> }
>>> 
>>> var myProps:Object = parseMyJson(json);
>>> 
>>> var name:string = myProps.name;
>>> 
>>> Would become:
>>> 
>>> function parseMyJson(json){
>>>     return JSON.parse(json);
>>> }
>>> 
>>> var myProps = parseMyJson(json);
>>> 
>>> var name = myProps["name"];
>>> 
>>> And this:
>>> var myObj:Object = {
>>>     name: "foo",
>>>     age : 30
>>> }
>>> 
>>> Would become:
>>> var myObj = {
>>>     "name": "foo",
>>>     "age" : 30
>>> }
>>> 
>>> These two features would have solved almost all minification issues
>>>I’ve
>>> run into.
>>> 
>>> I’d love to work on this myself, but I’m still not up to making any
>>>major
>>> changes to the compiler… :-(
>>> 
>>>> On Feb 5, 2018, at 6:13 PM, Alex Harui <[email protected]>
>>>>wrote:
>>>> 
>>>> 
>>>> 
>>>> On 2/5/18, 2:01 AM, "Gabe Harbs" <[email protected]> wrote:
>>>> 
>>>>> I’ll try to work on this. It’s pretty slow loading the debug build.
>>>>> 
>>>>> I still maintain there should be a compiler setting or language
>>>>>feature
>>>>> to prevent objects produced from JSON being destroyed on
>>>>>minification.
>>>> 
>>>> JSON Objects are not destroyed.  The code referencing their fields by
>>>> name
>>>> has those names changed.  Propose a way to determine that a data
>>>> structure
>>>> is external and what the compiler should generate and implement it.
>>>> IMO,
>>>> the answer is to create ValueObjects.  That is essentially typedefs
>>>>and
>>>> AFAIK, there is no way to automate typedef generation.
>>>> 
>>>> Also, you can turn off minification for the app as a whole.
>>>> 
>>>> Other ideas welcome,
>>>> -Alex
>>>> 
>>>>> This remains a pain point for developing apps and having to create
>>>>>VOs
>>>>> for every API is a drag.
>>>>> 
>>>>>> On Feb 5, 2018, at 10:21 AM, Alex Harui <[email protected]>
>>>>>> wrote:
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> On 2/4/18, 1:10 AM, "Gabe Harbs" <[email protected]> wrote:
>>>>>> 
>>>>>>> Typo. I meant js-reease.
>>>>>> 
>>>>>> Yeah, at some later point in time someone should build Value Objects
>>>>>> for
>>>>>> the JSON and get js-release working.  Maybe after this release.  I'm
>>>>>> just
>>>>>> trying to make the ASDoc useful.
>>>>>> 
>>>>>> I'm going to add Events to the class detail page and anchor links
>>>>>>from
>>>>>> the
>>>>>> lists to the details and maybe a simple search-for-class feature,
>>>>>> then I
>>>>>> think it will be time for a release.
>>>>>> 
>>>>>> -Alex
>>>>>>> 
>>>>>>>> On Feb 4, 2018, at 8:08 AM, Alex Harui <[email protected]>
>>>>>>>> wrote:
>>>>>>>> 
>>>>>>>>> 1. Why is bin-release not working?
>>>>>>>> 
>>>>>>>> Do you mean SWF support?
>>>>>>> 
>>>>>> 
>>>>> 
>>>> 
>>> 
>> 
>

Reply via email to