Difference between revisions of "Programming in D for Ruby Programmers"
(Created page with "This page is under community development. In the meantime, you may find the following links of interest as a Ruby programmer: *[http://hawkins.io/2015/04/excited-about-d/ Ru...") |
|||
Line 8: | Line 8: | ||
*[https://rounin.livejournal.com/24639.html David Oftedal writes on Project Euler problem 61: from Ruby to D] | *[https://rounin.livejournal.com/24639.html David Oftedal writes on Project Euler problem 61: from Ruby to D] | ||
*[https://www.google.de/search?q=ruby&domains=dlang.org&sourceid=google-search&sitesearch=forum.dlang.org&gws_rd=cr&ei=fT0kVdbAD8H6sAHFrYDwBQ#q=ruby+site:forum.dlang.org&domains=dlang.org&start=10 forum posts on Ruby] | *[https://www.google.de/search?q=ruby&domains=dlang.org&sourceid=google-search&sitesearch=forum.dlang.org&gws_rd=cr&ei=fT0kVdbAD8H6sAHFrYDwBQ#q=ruby+site:forum.dlang.org&domains=dlang.org&start=10 forum posts on Ruby] | ||
+ | |||
+ | == Adding methods to existing classes / UFCS == | ||
+ | |||
+ | In Ruby, it's possible to add methods to existing classes, even builtin ones: | ||
+ | |||
+ | <source lang="ruby"> | ||
+ | class String | ||
+ | def underline | ||
+ | puts self | ||
+ | puts "=" * self.length | ||
+ | end | ||
+ | end | ||
+ | |||
+ | "Hello, world!".underline | ||
+ | |||
+ | # prints: | ||
+ | # Hello, world! | ||
+ | # ============= | ||
+ | </source> | ||
+ | |||
+ | Because it uses a static compilation model, it's not possible to do exactly the same in D. However, D allows calling a free function as if it were a method, which mostly has the same effect from a caller's point of view, and has the additional advantage of not polluting the type's namespace: | ||
+ | |||
+ | <source lang="D"> | ||
+ | void underline(string s) { | ||
+ | import std.stdio : writeln; | ||
+ | import std.array : replicate; | ||
+ | writeln(s); | ||
+ | writeln("=".replicate(s.length)); | ||
+ | } | ||
+ | |||
+ | void main() { | ||
+ | "Hello, world!".underline(); | ||
+ | } | ||
+ | </source> |
Revision as of 08:54, 8 April 2015
This page is under community development.
In the meantime, you may find the following links of interest as a Ruby programmer:
- Ruby Programmer shares his excitement about D
- forum discussion of post
- Jacob Carlborg writes on embedding Ruby in a D application
- David Oftedal writes on Project Euler problem 61: from Ruby to D
- forum posts on Ruby
Adding methods to existing classes / UFCS
In Ruby, it's possible to add methods to existing classes, even builtin ones:
class String
def underline
puts self
puts "=" * self.length
end
end
"Hello, world!".underline
# prints:
# Hello, world!
# =============
Because it uses a static compilation model, it's not possible to do exactly the same in D. However, D allows calling a free function as if it were a method, which mostly has the same effect from a caller's point of view, and has the additional advantage of not polluting the type's namespace:
void underline(string s) {
import std.stdio : writeln;
import std.array : replicate;
writeln(s);
writeln("=".replicate(s.length));
}
void main() {
"Hello, world!".underline();
}