Skip to content
New issue

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

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

for own key in { ... } #32

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

for own key in { ... } #32

benekastah opened this issue Jun 13, 2011 · 15 comments

Comments

@benekastah
Copy link
Contributor

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.

@weepy
Copy link
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

@benekastah
Copy link
Contributor Author

or

for key ownedby obj { ... }

Edit: sorry, accidentally closed the issue.

@weepy
Copy link
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)

@benekastah
Copy link
Contributor Author

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?

@weepy
Copy link
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();
}

@weepy
Copy link
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)

@benekastah
Copy link
Contributor Author

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.

@weepy
Copy link
Owner

weepy commented Jun 13, 2011

for x from y { .. } ?

@weepy
Copy link
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]

@benekastah
Copy link
Contributor Author

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.

@weepy
Copy link
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

@benekastah
Copy link
Contributor Author

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]

@weepy
Copy link
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
Copy link

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
}

@weepy
Copy link
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//issues/32#issuecomment-11904448.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants