Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

Already on GitHub? Sign in to your account

for own key in { ... } #32

Open
benekastah opened this Issue Jun 13, 2011 · 15 comments

Comments

Projects
None yet
3 participants
Contributor

benekastah commented Jun 13, 2011

Are there plans to develop a method to easily generate a javascript for...in loop like:

var obj = {a: 'a', b: 'b'}
for (var key in obj) {
  if (obj.hasOwnProperty(key)) {
    doSomething();
  }
}

I think a variant of CoffeeScript's solution would be elegant:

for own key in obj {
  doSomething();
}

For me, this is the only really crucial thing I find missing from kaffeine. I will probably still end up using (and contributing) to it even with this missing because of how awesome async programming will be with this tool.

Owner

weepy commented Jun 13, 2011

hmm good idea - needs a decent keyword ...

for key within obj {
   doSomething();
}

?

Love some help ..

On Mon, Jun 13, 2011 at 6:02 PM, benekastah <
reply@reply.github.com>wrote:

Are there plans to develop a method to easily generate a javascript
for...in loop like:

var obj = {a: 'a', b: 'b'}
for (var key in obj) {
 if (obj.hasOwnProperty(key)) {
   doSomething();
 }
}

I think a variant of CoffeeScript's solution would be elegant:

for own key in obj {
 doSomething();
}

For me, this is the only really crucial thing I find missing from kaffeine.
I will probably still end up using (and contributing) to it even with this
missing because of how awesome async programming will be with this tool.

Reply to this email directly or view it on GitHub:
#32

Contributor

benekastah commented Jun 13, 2011

or

for key ownedby obj { ... }

Edit: sorry, accidentally closed the issue.

@benekastah benekastah closed this Jun 13, 2011

@benekastah benekastah reopened this Jun 13, 2011

Owner

weepy commented Jun 13, 2011

inside ?

On Mon, Jun 13, 2011 at 6:23 PM, benekastah <
reply@reply.github.com>wrote:

or

for key ownedby obj { ... }

Reply to this email directly or view it on GitHub:
#32 (comment)

Contributor

benekastah commented Jun 13, 2011

hmmm... I feel like I'm a little bit stuck on own. I think it's an intuitive word because it is in the native JavaScript method hasOwnProperty. What about:

forown key in obj

making forown a new keyword?

Owner

weepy commented Jun 13, 2011

How about :

for key in obj {
if !obj.hasOwnProperty(key), continue
doSomething();
}

^_^

Tapped on my fone

On 13 Jun 2011, at 18:02, benekastah <
reply@reply.github.com>
wrote:

for (var key in obj) {
if (obj.hasOwnProperty(key)) {
doSomething();
}

Owner

weepy commented Jun 13, 2011

Why do you need this feature so ? What's your use case. ?

Tapped on my fone

On 13 Jun 2011, at 19:36, benekastah
reply@reply.github.com
wrote:

hmmm... I feel like I'm a little bit stuck on own. I think it's an intuitive word because it is in the native JavaScript method hasOwnProperty. What about:

forown key in obj

making forown a new keyword?

Reply to this email directly or view it on GitHub:
#32 (comment)

Contributor

benekastah commented Jun 13, 2011

Fair enough, lol. Well, I will try to put something together to make this work tonight. I'll pick a keyword for you to veto :)

Edit: just saw your comment above.

I always loop that way by default, because otherwise I am looping through all the parent prototypes of the object. When I'm looping through an object, most often I only care about the direct members of that object (although this isn't always the case). It's an optimization, but it's also a security measure, to make sure that I only modify what I'm expecting to modify.

Owner

weepy commented Jun 13, 2011

for x from y { .. } ?

Owner

weepy commented Jun 13, 2011

while we're on the subject, it would be nice to be able to range between two variables. i.e. sugar for :
for(var i=a ; i < b; i++)

could do

for i=1..3 { }

or

for i of [a..b]

Contributor

benekastah commented Jun 13, 2011

I really like for x from y {...}. That one feels good to me.

About the ranges, what if a range simply resolved to an array?

[1...5] // compiles to [1, 2, 3, 4, 5]

Then looping would be built in:

for i in [1...5]

Additionally, one could use the for i of [a..b] construct you mentioned to skip doing for i, j in [a..b] to get the value. It might open up other useful possibilities as well.

Owner

weepy commented Jun 14, 2011

yeah :) how about:

[a..b]  
goes to
__array(a,b)

function __array(x,y) {
  var a = [];
  for(var i=x; i
Contributor

benekastah commented Jun 14, 2011

I like it (I will infer the rest of that function :). Should we distinguish between inclusive and exclusive ranges?

[1..5] // => [2, 3, 4] or [1, 2, 3, 4] ?
[1...5] // => [1, 2, 3, 4, 5]
Owner

weepy commented Jun 14, 2011

[1..5] // => [1,2, 3, 4, 5]
[1...5] // => [1, 2, 3, 4]

On Tue, Jun 14, 2011 at 5:48 PM, benekastah <
reply@reply.github.com>wrote:

I like it (I will infer the rest of that function :). Should we distinguish
between inclusive and exclusive ranges?

[1..5] // => [2, 3, 4] or [1, 2, 3, 4] ?
[1...5] // => [1, 2, 3, 4, 5]

Reply to this email directly or view it on GitHub:
#32 (comment)

cmwelsh commented Jan 4, 2013

I am authoring a language like Kaffeine. My thoughts are to steal from LiveScript in this instance: http://livescript.net/

The keywords used there are much less ambiguous (do I use one dot? do I use two? let me check the manual...)

for key in [1 til 10] {
}
for key in [1 to 10] {
}

Also I would like to see hasOwnProperty be the default looping construct. If you want ancestor keys then add something like this:

for all key in obj {
    console.log key
}
Owner

weepy commented Jan 5, 2013

Awesome. Like the keywords.

What's your philosophy for the language ?

On Friday, January 4, 2013, Chris M. Welsh wrote:

I am authoring a language like Kaffeine. My thoughts are to steal from
LiveScript in this instance: http://livescript.net/

The keywords used there are much less ambiguous (do I use one dot? do I
use two? let me check the manual...)

Also I would like to see hasOwnProperty be the default looping construct.
If you want ancestor keys then add something like this:

for all key in obj {
console.log key
}


Reply to this email directly or view it on GitHubhttps://github.com/weepy/kaffeine/issues/32#issuecomment-11904448.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment