Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. Other Discussions
  3. The Weird and The Wonderful
  4. Kotlin: new(ish) syntax emerges

Kotlin: new(ish) syntax emerges

Scheduled Pinned Locked Moved The Weird and The Wonderful
asp-netandroidlounge
16 Posts 11 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • R raddevus

    In Kotlin you can do this:

    var items = (1..300) // becomes an IntRange (range of integers)

    Additionally you can call the shuffle() method on the range to randomly shuffle the ints. Then you can call last() on the returned shuffled ints to get the random last item. So if you want a list of 10 random values in the range of 1 - 1000, you can do it with just a couple of lines of Kotlin. Each time through the loop the range is shuffled and a new last() is chosen.

    for (i in 1..10) {
    print((1..1000).shuffled().last())
    print (" | ")
    }

    Output looks like the following:

    795 | 948 | 719 | 304 | 733 | 849 | 723 | 66 | 316 | 619 |

    Try it out in your browser at : Try Kotlin[^] These new types of syntax are ugly to me, but I can see that they could grow on a dev. *Note:By emerges, I just mean that newer languages have syntax which looks similar to this. Kotlin has had the Range type for a long time. Basically a fluent interface[^] but just interesting that it becomes more of a core part of syntax in newish languages.

    K Offline
    K Offline
    kalberts
    wrote on last edited by
    #6

    The subrange notation is about 50 years old, isn't it? In Pascal (1970), the parentheses are not needed, though. Subranges are, of course, allowed on any discrete type. So if you have a TYPE month: (jan, feb, mar, apr, may, june, july, aug, sept, oct, nov, dec); - note that these are NOT integers, but a distinct value domain - you can declare a VAR SummerMonth: may..aug; and assigning a value to SummerMonth outside that range causes an exception. Maybe Kotlin provides a similar full-blown enum concept, including subranges. (In Pascal, arrays can have any subrange index, e.g. Members: ARRAY [1970..2025] OF MemberList; - maybe that is possible in Kotlin as well, but it usually is not in C-derived languages.)

    S R 2 Replies Last reply
    0
    • K kalberts

      The subrange notation is about 50 years old, isn't it? In Pascal (1970), the parentheses are not needed, though. Subranges are, of course, allowed on any discrete type. So if you have a TYPE month: (jan, feb, mar, apr, may, june, july, aug, sept, oct, nov, dec); - note that these are NOT integers, but a distinct value domain - you can declare a VAR SummerMonth: may..aug; and assigning a value to SummerMonth outside that range causes an exception. Maybe Kotlin provides a similar full-blown enum concept, including subranges. (In Pascal, arrays can have any subrange index, e.g. Members: ARRAY [1970..2025] OF MemberList; - maybe that is possible in Kotlin as well, but it usually is not in C-derived languages.)

      S Offline
      S Offline
      Stuart Dootson
      wrote on last edited by
      #7

      Member 7989122 wrote:

      Subranges are, of course, allowed on any discrete type.

      That's something I got used to with Ada that I wish I had in C++ (or any of the other static typed languages I use) - even in languages like Kotlin or Rust, which have first class support for ranges, they're still a run-time entity, not a compile-time thing, so you can't constrain how a function works by a range in the same way... And you can't take sub-ranges of enums either :-( Oh, for a [dependently typed language](https://en.wikipedia.org/wiki/Dependent\_type#Comparison\_of\_languages\_with\_dependent\_types)?

      Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p

      1 Reply Last reply
      0
      • R raddevus

        In Kotlin you can do this:

        var items = (1..300) // becomes an IntRange (range of integers)

        Additionally you can call the shuffle() method on the range to randomly shuffle the ints. Then you can call last() on the returned shuffled ints to get the random last item. So if you want a list of 10 random values in the range of 1 - 1000, you can do it with just a couple of lines of Kotlin. Each time through the loop the range is shuffled and a new last() is chosen.

        for (i in 1..10) {
        print((1..1000).shuffled().last())
        print (" | ")
        }

        Output looks like the following:

        795 | 948 | 719 | 304 | 733 | 849 | 723 | 66 | 316 | 619 |

        Try it out in your browser at : Try Kotlin[^] These new types of syntax are ugly to me, but I can see that they could grow on a dev. *Note:By emerges, I just mean that newer languages have syntax which looks similar to this. Kotlin has had the Range type for a long time. Basically a fluent interface[^] but just interesting that it becomes more of a core part of syntax in newish languages.

        G Offline
        G Offline
        grumpy_nl
        wrote on last edited by
        #8

        Reminds of Turbo Pascal, so not that new.

        R 1 Reply Last reply
        0
        • R raddevus

          In Kotlin you can do this:

          var items = (1..300) // becomes an IntRange (range of integers)

          Additionally you can call the shuffle() method on the range to randomly shuffle the ints. Then you can call last() on the returned shuffled ints to get the random last item. So if you want a list of 10 random values in the range of 1 - 1000, you can do it with just a couple of lines of Kotlin. Each time through the loop the range is shuffled and a new last() is chosen.

          for (i in 1..10) {
          print((1..1000).shuffled().last())
          print (" | ")
          }

          Output looks like the following:

          795 | 948 | 719 | 304 | 733 | 849 | 723 | 66 | 316 | 619 |

          Try it out in your browser at : Try Kotlin[^] These new types of syntax are ugly to me, but I can see that they could grow on a dev. *Note:By emerges, I just mean that newer languages have syntax which looks similar to this. Kotlin has had the Range type for a long time. Basically a fluent interface[^] but just interesting that it becomes more of a core part of syntax in newish languages.

          Richard DeemingR Offline
          Richard DeemingR Offline
          Richard Deeming
          wrote on last edited by
          #9

          raddevus wrote:

          Each time through the loop the range is shuffled and a new last() is chosen.

          Isn't that code going to be horribly inefficient? Surely the language must provide a better way to get a random number in a particular range?


          "These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer

          "These people looked deep within my soul and assigned me a number based on the order in which I joined" - Homer

          R E R 3 Replies Last reply
          0
          • K kalberts

            The subrange notation is about 50 years old, isn't it? In Pascal (1970), the parentheses are not needed, though. Subranges are, of course, allowed on any discrete type. So if you have a TYPE month: (jan, feb, mar, apr, may, june, july, aug, sept, oct, nov, dec); - note that these are NOT integers, but a distinct value domain - you can declare a VAR SummerMonth: may..aug; and assigning a value to SummerMonth outside that range causes an exception. Maybe Kotlin provides a similar full-blown enum concept, including subranges. (In Pascal, arrays can have any subrange index, e.g. Members: ARRAY [1970..2025] OF MemberList; - maybe that is possible in Kotlin as well, but it usually is not in C-derived languages.)

            R Offline
            R Offline
            raddevus
            wrote on last edited by
            #10

            Member 7989122 wrote:

            The subrange notation is about 50 years old, isn't it?

            Yeah, it probably is quite old.

            Member 7989122 wrote:

            but it usually is not in C-derived languages.

            And almost every language I use is C-derived (C++, C#, Java, JavaScript) so that's why it just looks odd to me.

            1 Reply Last reply
            0
            • G grumpy_nl

              Reminds of Turbo Pascal, so not that new.

              R Offline
              R Offline
              raddevus
              wrote on last edited by
              #11

              Yeah, I probably have forgotten about Pascal. Last time I actually used it was probably 1996 or so. :)

              1 Reply Last reply
              0
              • Richard DeemingR Richard Deeming

                raddevus wrote:

                Each time through the loop the range is shuffled and a new last() is chosen.

                Isn't that code going to be horribly inefficient? Surely the language must provide a better way to get a random number in a particular range?


                "These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer

                R Offline
                R Offline
                raddevus
                wrote on last edited by
                #12

                Richard Deeming wrote:

                Isn't that code going to be horribly inefficient? Surely the language must provide a better way to get a random number in a particular range?

                Oh yes, just laziness on my part for a quick example. There may be other ways to accomplish the same thing that are more efficient.

                1 Reply Last reply
                0
                • Richard DeemingR Richard Deeming

                  raddevus wrote:

                  Each time through the loop the range is shuffled and a new last() is chosen.

                  Isn't that code going to be horribly inefficient? Surely the language must provide a better way to get a random number in a particular range?


                  "These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer

                  E Offline
                  E Offline
                  englebart
                  wrote on last edited by
                  #13

                  This approach would not scale well if you want a random number between 1 and 2^31-1.

                  1 Reply Last reply
                  0
                  • R raddevus

                    In Kotlin you can do this:

                    var items = (1..300) // becomes an IntRange (range of integers)

                    Additionally you can call the shuffle() method on the range to randomly shuffle the ints. Then you can call last() on the returned shuffled ints to get the random last item. So if you want a list of 10 random values in the range of 1 - 1000, you can do it with just a couple of lines of Kotlin. Each time through the loop the range is shuffled and a new last() is chosen.

                    for (i in 1..10) {
                    print((1..1000).shuffled().last())
                    print (" | ")
                    }

                    Output looks like the following:

                    795 | 948 | 719 | 304 | 733 | 849 | 723 | 66 | 316 | 619 |

                    Try it out in your browser at : Try Kotlin[^] These new types of syntax are ugly to me, but I can see that they could grow on a dev. *Note:By emerges, I just mean that newer languages have syntax which looks similar to this. Kotlin has had the Range type for a long time. Basically a fluent interface[^] but just interesting that it becomes more of a core part of syntax in newish languages.

                    O Offline
                    O Offline
                    obermd
                    wrote on last edited by
                    #14

                    For basic loops I've wanted this type of syntax for a while, especially if I can replace the start and end items with variables.

                    1 Reply Last reply
                    0
                    • R raddevus

                      In Kotlin you can do this:

                      var items = (1..300) // becomes an IntRange (range of integers)

                      Additionally you can call the shuffle() method on the range to randomly shuffle the ints. Then you can call last() on the returned shuffled ints to get the random last item. So if you want a list of 10 random values in the range of 1 - 1000, you can do it with just a couple of lines of Kotlin. Each time through the loop the range is shuffled and a new last() is chosen.

                      for (i in 1..10) {
                      print((1..1000).shuffled().last())
                      print (" | ")
                      }

                      Output looks like the following:

                      795 | 948 | 719 | 304 | 733 | 849 | 723 | 66 | 316 | 619 |

                      Try it out in your browser at : Try Kotlin[^] These new types of syntax are ugly to me, but I can see that they could grow on a dev. *Note:By emerges, I just mean that newer languages have syntax which looks similar to this. Kotlin has had the Range type for a long time. Basically a fluent interface[^] but just interesting that it becomes more of a core part of syntax in newish languages.

                      K Offline
                      K Offline
                      Keith Barrow
                      wrote on last edited by
                      #15

                      Haskell ranges:

                      let items = [1..10]

                      KeithBarrow.net[^] - It might not be very good, but at least it is free!

                      1 Reply Last reply
                      0
                      • Richard DeemingR Richard Deeming

                        raddevus wrote:

                        Each time through the loop the range is shuffled and a new last() is chosen.

                        Isn't that code going to be horribly inefficient? Surely the language must provide a better way to get a random number in a particular range?


                        "These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer

                        R Offline
                        R Offline
                        Rob Grainger
                        wrote on last edited by
                        #16

                        That was my immediate thought too. Glad to see someone else cares about wasting cycles.

                        "If you don't fail at least 90 percent of the time, you're not aiming high enough." Alan Kay.

                        1 Reply Last reply
                        0
                        Reply
                        • Reply as topic
                        Log in to reply
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes


                        • Login

                        • Don't have an account? Register

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • World
                        • Users
                        • Groups