Today the Hobbyist, Tommorow, The World!
Walter Bright
newshound at digitalmars.com
Thu May 4 10:57:02 PDT 2006
Dave wrote:
> An idea for whatever the style outcome - post a link to something like
> this somewhere, or otherwise a "Sample Code" page. The idea would be to
> provide people in a hurry (a) nice short example(s) showing some of the
> primary D features. For example, I would think this would be something
> C++ coders could quickly scan and be intrigued by:
I think this is very good. Can I use it, or perhaps you can put it on
wikipedia?
> #!/usr/bin/dmd -run
> /* sh style script syntax is supported! */
>
> /* Hello World in D
> To compile:
> dmd hello.d
> or to optimize:
> dmd -O -inline -release hello.d
> */
>
> import std.stdio;
>
> void main(char[][] args)
> {
> writefln("Hello World, Reloaded");
>
> // auto type inference and built-in foreach
> foreach(argc, argv; args)
> {
> // OOP!
> CmdLin cl = new CmdLin(argc, argv);
> // improved printf!!
> writefln(cl.argnum, cl.suffix, " arg: %s", cl.argv);
> // Garbage Collection or explicit memory management!!!
> delete cl;
> }
>
> // Nested structs, classes and functions!
> struct specs
> {
> // all vars. automatically initialized
> int count, allocated;
> }
>
> specs argspecs(char[][] args)
> {
> specs* s = new specs;
> // no need for '->'
> s.count = args.length;
> s.allocated = typeof(args).sizeof; // built-in properties for
> native types
> foreach(argv; args)
> s.allocated += argv.length * typeof(argv[0]).sizeof;
> return *s;
> }
>
> // built-in string and common string operations
> writefln("argc = %d, " ~ "allocated =
> %d",argspecs(args).count,argspecs(args).allocated);
> }
>
> class CmdLin
> {
> private int _argc;
> private char[] _argv;
>
> public:
> this(int argc, char[] argv)
> {
> _argc = argc;
> _argv = argv;
> }
>
> int argnum()
> {
> return _argc + 1;
> }
>
> char[] argv()
> {
> return _argv;
> }
>
> char[] suffix()
> {
> char[] suffix = "th";
> switch(_argc)
> {
> case 0:
> suffix = "st";
> break;
> case 1:
> suffix = "nd";
> break;
> case 2:
> suffix = "rd";
> break;
> default:
> }
> return suffix;
> }
> }
More information about the Digitalmars-d
mailing list