标签: language-concepts

为什么静态方法不被认为是良好的OO实践?

我在阅读Programming Scala.在第4章的开头,作者评论说Java支持静态方法,这些方法是"不那么纯粹的OO概念".为什么会这样?

java oop static-methods scala language-concepts

35
推荐指数
5
解决办法
2万
查看次数

我不明白这种语法

我正在研究一个将数据存储在mongodb中的golang应用程序示例.此行的代码(https://github.com/zeebo/gostbook/blob/master/context.go#L36)似乎访问存储在gorilla会话中的用户ID:

if uid, ok := sess.Values["user"].(bson.ObjectId); ok {
  ...
}
Run Code Online (Sandbox Code Playgroud)

有人请告诉我这里的语法吗?我理解sess.Values["user"]从会话中获取一个值,但接下来的部分是什么?为什么点后的表达式在括号中?这是函数调用吗?谢谢!

syntax go language-concepts type-assertion

32
推荐指数
1
解决办法
7054
查看次数

记录结构的目的是什么?

C# 9 添加了record类型,这是一种使用基于值的相等性的新引用类型。

C# 10 引入了record struct用于定义具有与record( https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/record ) 类似属性的值类型的语法。

创建一个类型的值类型版本似乎很不寻常,该类型被创建为具有基于值的相等性的引用类型 - 这肯定会消除使用该类型的大部分好处。

你为什么要声明 a record struct

我还缺少什么吗?

c# types language-concepts c#-10.0

13
推荐指数
1
解决办法
5693
查看次数

德尔福 - 我如何改进

好吧,所以我已经在Delphi中编程了3到3年了,并认为自己是一个对概念有充分理解的中级应用程序设计师.但我怎样才能变得更好?我一直在寻找我经常使用的几个组件的来源(virtualtreeview,asynccalls),那里的代码只是让我感到困惑.是的,我可以理解它的一部分,但其他的事情就在我的头上.

那么哪些是提高编程能力的最佳资源呢?书籍,博客或其他信息来源?

delphi language-concepts

11
推荐指数
3
解决办法
630
查看次数

什么是错误和警告的常见术语?

我想在定价操作期间建立一个OO层次的错误和警告返回给客户端:

interface PricingMessage {}

interface PricingWarning extends PricingMessage {}

interface PricingError extends PricingMessage {}

class NoSuchProductError implements PricingError {
 ...
}
Run Code Online (Sandbox Code Playgroud)

我不是很喜欢这个名字PricingMessage.包含错误和警告的概念是什么?

编辑:要清楚,我正在寻找一个特定的错误和警告的常见概念或名称(不包括例如一般信息消息).例如,编译器也会报告错误和警告.这些是什么?

naming language-concepts

10
推荐指数
2
解决办法
1539
查看次数

C 中的 const 限定符和 C++ 中的 const 限定符有什么区别?

我发现了用户R..的评论

C 和 C++ 不是同一种语言。特别是,Cconst与 C++ 无关const

const我知道, C 中的限定符和C++ 中的限定符之间的区别之一const是其默认链接。

在 C++ 中,在名称空间范围内使用限定符声明的对象const具有内部链接,而在 C 中,在全局范围内使用限定符声明的对象(之前const没有限定符)具有外部链接。staticconst

但是 C 和 C++ 语言之间还有什么不同呢?我认为两种语言都有相同的概念和目的。

我的问题:

  • C 中的 const 限定符和 C++ 中的 const 限定符有什么区别?

C 和 C++ 中“const”有何不同?不要在限定符的上下文中指出 C 和 C++ 语言之间的const确切差异。只有在某种语言中你不能做或可以做的事情。

c c++ language-comparisons constants language-concepts

10
推荐指数
1
解决办法
680
查看次数

myCustomDictionary.Values应返回什么类型?

如果你有对象Dictionary<k, v> myDictionary,那么myDictionary.Values将是类型Dictionary<k, v>.ValueCollection并且myDictionary.Keys将是类型Dictionary<k, v>.KeyCollection.

我不明白为什么类型myDictionary.Values不是IEnumerable<v>,IList<v>或其他东西.

现在,考虑到这一点,如果我创建一个自定义类型的字典; Dictionary2<k1, k2, v>,应该myCustomDictionary.Values返回一个IEnumerable<v>,还是ValueCollection的自定义工具?更重要的是,为什么?

c# collections dictionary language-concepts

7
推荐指数
1
解决办法
69
查看次数

构建Java控制台程序的正确方法

我是一名 80 年代的老程序员,精通 C 和 Pascal。我对 Java 及其概念还很陌生。在尝试使用 OOP 技术学习 Java 的新方法时,我对组合应用程序的正确方法感到相当困惑。

我正在尝试使用以下规则构建一个基本程序。

一个组织有自己的内部图书馆。Staff 类是通用的,有姓名和电话。一些员工是图书管理员。其他人都是会员。所以会员和图书馆员是专门的班级。我认为在这种情况下我们称它们为继承或扩展。

现在我正在尝试构建基本功能,例如输入和打印会员记录。我正在尝试构建一个基于文本的菜单。也许稍后我会考虑子菜单。目前它只是一个简单的菜单。

我不知道是否应该使菜单也成为一个对象,但这就是我想我会做的。

考虑到这一点,这就是我所做的。

我的主要程序:

public class Library extends Menus {
    public static void main(String[] args) {
        Menus Start = new Menus();
        Start.ShowMainMenu();

    }
}
Run Code Online (Sandbox Code Playgroud)

StaffClass.java

public class StaffClass {
    private String Name;
    private String Phone;

    public void InputData() {
        Scanner UserInput = new Scanner(System.in);

        System.out.print("Enter staff name "); Name = UserInput.nextLine();
        System.out.print("Enter staff phone number "); Phone = UserInput.nextLine();

    }

    public void PrintData() {
        System.out.println("Name …
Run Code Online (Sandbox Code Playgroud)

java oop language-concepts

6
推荐指数
1
解决办法
3618
查看次数

无法弄清楚代码执行顺序

我有以下代码.

class X {
    X(){
        super();
        System.out.println("X()");
    }
}

class Y extends X {
    Y(){
        super();
        System.out.println("Y()");
    }
}

class Z extends Y {
    Z(){
        super();
        System.out.println("Z()");
    }

    public static void main(String args[]){

        Z z1 = new Z();
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到了输出

X()
Y()
Z()
Run Code Online (Sandbox Code Playgroud)

一切都很好.这是方式,它应该是.当我在类Z中创建一个X()的静态对象时,如下所示

class X {
    X(){
        super();
        System.out.println("X()");
    }
}

class Y extends X {
    Y(){
        super();
        System.out.println("Y()");
    }
}

class Z extends Y {
    static X x1 = new X();
    Z(){
        super();
        System.out.println("Z()");
    }   

    public static …
Run Code Online (Sandbox Code Playgroud)

java instance language-concepts

6
推荐指数
0
解决办法
49
查看次数

C对阵列的厌恶

在关于C的介绍性书籍中,经常声称指针或多或少数组.充其量只是一个巨大的简化吗?

存在 C中的数组类型,它可以表现从指针完全不同的,例如:

#include <stdio.h>

int main(int argc, char *argv[]){
  int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  int *b = a;
  printf("sizeof(a) = %lu\n", sizeof(a));
  printf("sizeof(b) = %lu\n", sizeof(b));
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

给出输出

sizeof(a) = 40 
sizeof(b) = 8 
Run Code Online (Sandbox Code Playgroud)

或者作为另一个例子a = b会产生编译错误(GCC:"赋值给带数组类型的表达式").

当然,指针和数组之间存在密切关系,在某种意义上,数组变量本身的内容是第一个数组元素的内存地址,例如int a[10] = {777, 1, 2, 3, 4, 5, 6, 7, 8, 9}; printf("a = %ul\n", a);打印包含777的地址.

现在,一方面,如果你在结构中"隐藏"数组,只需使用=运算符就可以轻松复制大量数据(数组,如果忽略包装结构)(这甚至也很快):

#include …
Run Code Online (Sandbox Code Playgroud)

c arrays pointers language-concepts

6
推荐指数
2
解决办法
418
查看次数