Home > Backend Development > Golang > How to define an interface with properties?

How to define an interface with properties?

PHPz
Release: 2024-02-10 22:30:09
forward
795 people have browsed it

How to define an interface with properties?

php editor Yuzai will introduce to you how to define an interface with attributes. In PHP, an interface is a convention that defines the methods a class should implement. However, sometimes we also need to define properties in the interface. To define an interface with properties, we can use constants to simulate properties and assign values ​​in the class that implements the interface. In this way, we can define and use properties in the interface. Next, let's take a look at the specific implementation method.

Question content

I have a question: Is it possible to set an interface for a linear space?

Let me remind you that in linear space l, there are operations of adding elements and multiplying elements by numbers. In addition, two properties are also satisfied:

1) a b in

l

2)l in ak, where k - scalar

I present the interface for linear space in the following form:

type Point interface {
}

type LinSpace interface {
    Sum(x, y Point)
    Prod(x Point, k float64)
}
Copy after login

How to consider the above two properties in the interface definition?

Solution

Interfaces can only contain methods.

You can do this:

// effective go says: interface names should contain prefix -er 
    type linspacer interface {
        sum() float64
        prod(k float64) float64
    }
    
    // struct that implements interface
    type linspaceimpl struct {
        a float64
        b float64
    }
    
    // implementation of sum() method
    // also, you don't need to pass a and b vars
    // because they're already exist in linspaceimpl
    func (l *linspaceimpl) sum() float64 {
        return l.a + l.b
    }
    
    // implementation of prod() method
    // unlike the sum() method, here we need extra param - k
    // so it has to be passed, or you can add it to
    // linspaceimpl as another fields but it doesn't
    // make any sense though
    func (l *linspaceimpl) prod(k float64) float64 {
        return l.a * k
    }
    
    // unnecessary "constructor" to optimize your main function
    // and clarify code
    func newlinspace(a, b float64) linspacer {
    // since linspaceimpl correctly implements linspacer interface
    // you can return instance of linspaceimpl as linspacer
        return &linspaceimpl{
            a: a,
            b: b,
        }
    }
Copy after login

You can then do this in your main (or other) function:

// Use any float values
    ls := NewLinSpace(11.2, 24.7)
    
    fmt.Println(ls.Sum())      // 35.9
    fmt.Println(ls.Prod(30.2)) // 338.23999999999995
Copy after login

This is how "oop" works in go.

The above is the detailed content of How to define an interface with properties?. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template