Thread overview
User imput string int and float[DOUBT]
February 15
How do I make a class person where I use set and get methods to imput the user type:

Import std.stdio;

class person
{
  private:
  string name, address;
  int age;
  float height;

public:
  void setNome()
  {
    write("Enter Your Name:");
    // the problem is here how am I going to read the imput of a string typed by the user?
  }

void setIty()
{
   write("Enter Your Age:");
  // Another problem here also to read integer values like I would?
}

void setHeight()
{
  write("Enter Your Height:");
  // Another problem here also to read floats or double values like I would?
}

float getHeight()
{
  return height;
}

int getIty()
{
  return age;
}

string getNome()
{
  return name;
}

}

void main ()
{
  person p = new person();

  p.setName();
  p.setIdade();
  p.setHeight();

  p.getName();
  p.getIdade();
  p.getHeight();
}

February 15
On 02/15/2017 03:20 PM, Jean Cesar wrote:
> How do I make a class person where I use set and get methods to imput
> the user type:

I have some information here:

  http://ddili.org/ders/d.en/input.html

You should also know how to read strings:

  http://ddili.org/ders/d.en/strings.html

And this section about refactoring has the concept of a readInt() function template:

  http://ddili.org/ders/d.en/functions.html#ix_functions.refactor

Combining all three:

import std.stdio;
import std.traits;

auto read(T)(ref T t, string message)
if (!isSomeString!T) {
    writef("%s: ", message);
    readf(" %s", &t);
    return t;
}

auto read(S)(ref S s, string message)
if (isSomeString!S) {
    import std.string : strip;
    writef("%s: ", message);
    s = readln().strip();
    return s;
}

class person
{
private:
    string name, address;
    int age;
    float height;

public:
    void setNome()
    {
        read(name, "Enter Your Name");
    }

    void setIty()
    {
        read(age, "Enter Your Age");
    }

    void setHeight()
    {
        read(height, "Enter Your Height");
    }

    float getHeight()
    {
        return height;
    }

    int getIty()
    {
        return age;
    }

    string getNome()
    {
        return name;
    }

}

void main ()
{
    person p = new person();

    p.setNome();
    p.setIty();
    p.setHeight();

    writeln(p.getNome());
    writeln(p.getIty());
    writeln(p.getHeight());
}

Unrelated, a bunch of get/set methods is commonly seen as inferior to a design where another piece of code does the reading and makes the object after the fact:

person readPerson(File input) {
    // ... parse the input ...
    // Potentially, use the constructor:
    auto p = new person(name, age, /* ... */);
    return p;
}

One reason is the fact that the person may be seen as incomplete and unusable unless all fields are set. Again, it's beside the point... :)

Ali

February 16
On Wednesday, 15 February 2017 at 23:40:41 UTC, Ali Çehreli wrote:
> On 02/15/2017 03:20 PM, Jean Cesar wrote:
>> How do I make a class person where I use set and get methods to imput
>> the user type:
>
> I have some information here:
>
>   http://ddili.org/ders/d.en/input.html
>
> You should also know how to read strings:
>
>   http://ddili.org/ders/d.en/strings.html
>
> And this section about refactoring has the concept of a readInt() function template:
>
>   http://ddili.org/ders/d.en/functions.html#ix_functions.refactor
>
> Combining all three:
>
> import std.stdio;
> import std.traits;
>
> auto read(T)(ref T t, string message)
> if (!isSomeString!T) {
>     writef("%s: ", message);
>     readf(" %s", &t);
>     return t;
> }
>
> auto read(S)(ref S s, string message)
> if (isSomeString!S) {
>     import std.string : strip;
>     writef("%s: ", message);
>     s = readln().strip();
>     return s;
> }
>
> class person
> {
> private:
>     string name, address;
>     int age;
>     float height;
>
> public:
>     void setNome()
>     {
>         read(name, "Enter Your Name");
>     }
>
>     void setIty()
>     {
>         read(age, "Enter Your Age");
>     }
>
>     void setHeight()
>     {
>         read(height, "Enter Your Height");
>     }
>
>     float getHeight()
>     {
>         return height;
>     }
>
>     int getIty()
>     {
>         return age;
>     }
>
>     string getNome()
>     {
>         return name;
>     }
>
> }
>
> void main ()
> {
>     person p = new person();
>
>     p.setNome();
>     p.setIty();
>     p.setHeight();
>
>     writeln(p.getNome());
>     writeln(p.getIty());
>     writeln(p.getHeight());
> }
>
> Unrelated, a bunch of get/set methods is commonly seen as inferior to a design where another piece of code does the reading and makes the object after the fact:
>
> person readPerson(File input) {
>     // ... parse the input ...
>     // Potentially, use the constructor:
>     auto p = new person(name, age, /* ... */);
>     return p;
> }
>
> One reason is the fact that the person may be seen as incomplete and unusable unless all fields are set. Again, it's beside the point... :)
>
> Ali

So I'm a beginner in this language and have very little time I started I'm interested in apprehending concepts of object orientation polymorphism inheritance, multiple inheritance as in c ++, but I did not understand how to use constructor in it
Because I simply did.

Class person
{
   person(){}
   ~ Person () {}
}

And error ...
February 15
On 02/15/2017 05:49 PM, Jean Cesar wrote:

> So I'm a beginner in this language and have very little time I started
> I'm interested in apprehending concepts of object orientation
> polymorphism inheritance, multiple inheritance as in c ++

D is similar to C++ but also very different.

> but I did not
> understand how to use constructor in it
> Because I simply did.
>
> Class person
> {
>    person(){}
>    ~ Person () {}
> }
>
> And error ...

In D, constructor is always called this():

class Person
{
   this(){}
   ~this() {}
}

void main() {
    auto p = new Person();
}

Ali

February 16
On Thursday, 16 February 2017 at 02:17:49 UTC, Ali Çehreli wrote:
> On 02/15/2017 05:49 PM, Jean Cesar wrote:
>
> > So I'm a beginner in this language and have very little time
> I started
> > I'm interested in apprehending concepts of object orientation
> > polymorphism inheritance, multiple inheritance as in c ++
>
> D is similar to C++ but also very different.
>
> > but I did not
> > understand how to use constructor in it
> > Because I simply did.
> >
> > Class person
> > {
> >    person(){}
> >    ~ Person () {}
> > }
> >
> > And error ...
>
> In D, constructor is always called this():
>
> class Person
> {
>    this(){}
>    ~this() {}
> }
>
> void main() {
>     auto p = new Person();
> }
>
> Ali



So I used get methods and sets only as initial pattern to netender the functioning of the language in relation to some concepts of the same I intend to learn it not because it is a new language, but I want to understand how to leave a very small code with the largest number of Possible functionality type I still do not know very well or use constructors in C ++ but I have very high potential in a code with multiple inheritance, I think of compilers in the case of the code that favors me in reading so I would do something like:

void main ()
{
   minhaclasse c = new minhaclasse(string text);
   minhaclasse d = new minhaclasse(int number);

 write("Enter your name: ")
 c.set();

 write("Enter your age: ")
 d.set();
  /*
    the set method would already fetch user i
    imput by mistake for the information automatically
  */

  Writeln
   (
    "\n\tString:", c.get (),
    "\n\tInt:", d.get ()
   );
}

Or something like:



void main ()
{
  string txt;
   Int num;
 write("Enter your name: ")
 minhaclasse(text).set();

 write("Enter your age: ")
 minhaclasse(num).set();

  writeln
   (
    "\n\tString:", minhaclasse(text).print() ;,
    "\n\tInt:", minhaclasse(num).print();
   );
}

I think of object orientation this way to avoid getting rewritten many things so I would only define what the set or get would return by initializing the constructor only but I have no idea how to do that ..

My goal in learning to use languages like Java, C ++, D is with the intention of learning the best way to reuse code and orienation to objects and also development cross-platform codes that will run in standard ansi for, Unix, Linux, Windows, android etc. ..
February 16
On 02/16/2017 02:05 PM, Jean Cesar wrote:

> So I used get methods and sets only as initial pattern to netender the
> functioning of the language in relation to some concepts of the same

Makes sense...

> how to leave a very small code with the largest number of
> Possible functionality type

I think D is very suitable for that.

> I still do not know very well or use
> constructors in C ++

Understandable: Many coding guidelines eschew doing non-trivial work in constructors. They require a member function like obj.initialize(/* ... */) to be called in order to get a functioning object.

> but I have very high potential in a code with
> multiple inheritance

That's going to be a problem because D does not allow multiple inheritance.

> I think of compilers in the case of the code that
> favors me in reading so I would do something like:
>
> void main ()
> {
>    minhaclasse c = new minhaclasse(string text);
>    minhaclasse d = new minhaclasse(int number);
>
>  write("Enter your name: ")
>  c.set();

So, your minhaclasse is basically ValorLegível (ReadableValue), which would not scale because likely it's also writable and movable, etc. And that explains why you're looking for multiple inheritance. :)

// NOT valid D (and no, I don't speak Portuguese)
class MinhaValor : ValorLegível, ValorEscrita, ValorMóvel /*, ... */ {
    // ...
}

> void main ()
> {
>   string txt;
>    Int num;
>  write("Enter your name: ")
>  minhaclasse(text).set();
>
>  write("Enter your age: ")
>  minhaclasse(num).set();
>
>   writeln
>    (
>     "\n\tString:", minhaclasse(text).print() ;,
>     "\n\tInt:", minhaclasse(num).print();
>    );
> }
>
> I think of object orientation this way to avoid getting rewritten many
> things so I would only define what the set or get would return by
> initializing the constructor only but I have no idea how to do that ..

You make it sound as if OOP is for code reuse or for reducing code repetition. I think regular functions provide that already.

Unless polymorphism is really beneficial, functional style is preferable. Additionally, D has this very useful universal function call syntax (UFCS), which makes your use case easy to implement, and which my earlier code could have benefited from as well.

import std.stdio;
import std.traits;

auto read(T)(ref T t, string message)
if (!isSomeString!T) {
    writef("%s: ", message);
    readf(" %s", &t);
    return t;
}

auto read(S)(ref S s, string message)
if (isSomeString!S) {
    import std.string : strip;
    writef("%s: ", message);
    s = readln().strip();
    return s;
}

class person
{
private:
    string name, address;
    int age;
    float height;

public:
    static person fromConsole()
    {
        auto p = new person();
        /* UFCS in action: Note how these are not written as
         *    read(p.name, /* ... */)
         */
        p.name.read("Enter Your Name");
        p.age.read("Enter Your Age");
        p.height.read("Enter Your Height");
        return p;
    }

    float getHeight()
    {
        return height;
    }

    int getIty()
    {
        return age;
    }

    string getNome()
    {
        return name;
    }

}

void main ()
{
    person p = person.fromConsole();

    writeln(p.getNome());
    writeln(p.getIty());
    writeln(p.getHeight());
}

> My goal in learning to use languages like Java, C ++, D is with the
> intention of learning the best way to reuse code and orienation to
> objects and also development cross-platform codes that will run in
> standard ansi for, Unix, Linux, Windows, android etc. ..

Ali

February 17
On Thursday, 16 February 2017 at 22:44:58 UTC, Ali Çehreli wrote:
> On 02/16/2017 02:05 PM, Jean Cesar wrote:
>
> > So I used get methods and sets only as initial pattern to
> netender the
> > functioning of the language in relation to some concepts of
> the same
>
> Makes sense...
>
> > how to leave a very small code with the largest number of
> > Possible functionality type
>
> I think D is very suitable for that.
>
> > I still do not know very well or use
> > constructors in C ++
>
> Understandable: Many coding guidelines eschew doing non-trivial work in constructors. They require a member function like obj.initialize(/* ... */) to be called in order to get a functioning object.
>
> > but I have very high potential in a code with
> > multiple inheritance
>
> That's going to be a problem because D does not allow multiple inheritance.
>
> > I think of compilers in the case of the code that
> > favors me in reading so I would do something like:
> >
> > void main ()
> > {
> >    minhaclasse c = new minhaclasse(string text);
> >    minhaclasse d = new minhaclasse(int number);
> >
> >  write("Enter your name: ")
> >  c.set();
>
> So, your minhaclasse is basically ValorLegível (ReadableValue), which would not scale because likely it's also writable and movable, etc. And that explains why you're looking for multiple inheritance. :)
>
> // NOT valid D (and no, I don't speak Portuguese)
> class MinhaValor : ValorLegível, ValorEscrita, ValorMóvel /*, ... */ {
>     // ...
> }
>
> > void main ()
> > {
> >   string txt;
> >    Int num;
> >  write("Enter your name: ")
> >  minhaclasse(text).set();
> >
> >  write("Enter your age: ")
> >  minhaclasse(num).set();
> >
> >   writeln
> >    (
> >     "\n\tString:", minhaclasse(text).print() ;,
> >     "\n\tInt:", minhaclasse(num).print();
> >    );
> > }
> >
> > I think of object orientation this way to avoid getting
> rewritten many
> > things so I would only define what the set or get would
> return by
> > initializing the constructor only but I have no idea how to
> do that ..
>
> You make it sound as if OOP is for code reuse or for reducing code repetition. I think regular functions provide that already.
>
> Unless polymorphism is really beneficial, functional style is preferable. Additionally, D has this very useful universal function call syntax (UFCS), which makes your use case easy to implement, and which my earlier code could have benefited from as well.
>
> import std.stdio;
> import std.traits;
>
> auto read(T)(ref T t, string message)
> if (!isSomeString!T) {
>     writef("%s: ", message);
>     readf(" %s", &t);
>     return t;
> }
>
> auto read(S)(ref S s, string message)
> if (isSomeString!S) {
>     import std.string : strip;
>     writef("%s: ", message);
>     s = readln().strip();
>     return s;
> }
>
> class person
> {
> private:
>     string name, address;
>     int age;
>     float height;
>
> public:
>     static person fromConsole()
>     {
>         auto p = new person();
>         /* UFCS in action: Note how these are not written as
>          *    read(p.name, /* ... */)
>          */
>         p.name.read("Enter Your Name");
>         p.age.read("Enter Your Age");
>         p.height.read("Enter Your Height");
>         return p;
>     }
>
>     float getHeight()
>     {
>         return height;
>     }
>
>     int getIty()
>     {
>         return age;
>     }
>
>     string getNome()
>     {
>         return name;
>     }
>
> }
>
> void main ()
> {
>     person p = person.fromConsole();
>
>     writeln(p.getNome());
>     writeln(p.getIty());
>     writeln(p.getHeight());
> }
>
> > My goal in learning to use languages like Java, C ++, D is
> with the
> > intention of learning the best way to reuse code and
> orienation to
> > objects and also development cross-platform codes that will
> run in
> > standard ansi for, Unix, Linux, Windows, android etc. ..
>
> Ali

I tried to define a method to read vectors of chars but this is giving error

auto read(C)(ref C c, char[] message)
if (!isSomeChar!C) {
    writef("\n\t%s: ", message);
    read(" %s", &c);
    return c;
}