Questions tagged «language-agnostic»

该标签用于非特定于编程语言或环境的问题。

3
方法重载什么时候合适?
假设我正在开发一个现有的,相当大的系统。我有一个myObject类的对象MyClass(出于示例的原因,假设我正在Java中工作)。myObject是一种含有一种组合物Collection,比方说,一个List和其它目的(我认为)是无关紧要的。它包含委托方法,这些委托方法仅用于调用List它所组成的方法,以确保List它所具有的不暴露(对不起,如果我的术语错误)。 假设这List是一个,List<String>但是由于某种原因,主要的访问方法是class的mask方法SomeOtherClass。如果要在其中插入一个新的值对List,则需要一个SomeOtherClass名为的对象someObject。我会打电话给,myObject.insert(someObject)并且在insert方法内部将有一些魔术可以检索String到中放入List<String>。 现在假设我只有一个String值,没有SomeOtherClass要插入的对象。假设我无法修改该insert方法,因为它会破坏系统中的所有内容。那我应该重载该insert方法吗?还是应该在SomeOtherClass每次调用时创建一个新对象insert? 我想如果我确实超载了,它会看起来像这样…… public void insert(String s) { ... } public void insert(SomeOtherObject obj) { this.insert(obj.magicStringMethod()); } (此示例是一个人为的难题,它基于我昨天遇到的关于超载的类似(稍微复杂一些)情况。如果有不清楚的地方,我将对其进行扩展) 这是重载方法的合适地方吗?如果没有,我什么时候应该重载方法?

5
应该在单元测试之前或之后执行代码审查
我正在与我的同事讨论何时执行代码审查-在单元测试之前或之后。最佳做法是什么? 我们可能需要考虑的一些因素(可能还有更多): 代码更改的大小-较大的更改意味着代码审查将导致更多更改。如果这些更改要大得多(如果UT在代码审查之前),则需要再次重复大多数UT。 进行单元测试所需的时间 是新功能还是错误修复

4
STDOUT及其杂质
我已经阅读了很多有关函数式编程的书籍和文章,但仍然感到羞愧,因为无法确定地理解一些非常基本的概念。 函数式编程的主要思想之一是相同的输入始终应产生相同的输出。因此,按定义,查询数据库或写入文件无法以纯功能样式完成。例如,这就是我们需要monad的原因之一。 问题是-为什么我们认为STDOUT输出不纯?是的,任何文件处理程序都存在风险-我们永远无法确定总是会写入数据。但是STDOUT呢?为什么我们认为它不可靠?评估本身是否更加不可靠?我的意思是,我们总是可以拉动触发器,从而进行中断计算。


4
是什么使资源“昂贵”?
我正在阅读休眠信息,并且遇到诸如“跨多个请求打开JDBC连接不是一件好事,因为它是一种昂贵的资源”这样的语句。 什么是昂贵的资源? 编辑:我要添加未知的用户添加为下面的注释。 如果建立数据库连接很昂贵,那么为什么不一次又一次地使用同一事物(而不是缓存),而不是每次都关闭并打开它?

4
哪些软件开发方法可以视为基础
我正在写一份涉及软件开发方法论的小型研究论文。我一直在研究所有可用的方法论,并且想知道在所有方法论中,是否有任何方法为其他方法论奠定了基础? 例如,查看以下方法: 敏捷,原型设计,洁净室,迭代,RAD,RUP,螺旋,瀑布,XP,精益,Scrum,V模型,TDD。 我们可以说: 原型,迭代,螺旋和瀑布是其他的“基础”吗? 还是没有“基础”之类的东西,每种方法都有自己独特的历史吗? 我当然想在我的研究论文中描述所有方法论,但是我根本没有时间这样做,这就是为什么我想知道哪些方法论可以看作代表。

1
用于推断类型参数的类型参数的技术名称?
设置:假设我们有一个名为type的类型Iterator,该类型具有type参数Element: interface Iterator<Element> {} 然后我们有一个接口Iterable,该接口具有一个将返回的方法Iterator。 // T has an upper bound of Iterator interface Iterable<T: Iterator> { getIterator(): T } Iterator泛型的问题是我们必须为其提供类型参数。 解决此问题的一种方法是“推断”迭代器的类型。以下伪代码表达了这样的想法:存在一个类型变量Element,该类型变量被推断为Iterator: interface <Element> Iterable<T: Iterator<Element>> { getIterator(): T } 然后我们在这样的地方使用它: class Vec<Element> implements Iterable<VecIterator<Element>> {/*...*/} 这个定义在其定义中Iterable没有使用Element任何其他地方,但在我的实际用例中却使用了。使用的某些函数Iterable还需要能够约束其参数以接受Iterables,该s仅返回某些迭代器,例如双向迭代器,这就是为什么返回的迭代器被参数化而不是元素类型的原因。 问题: 这些推断的类型变量是否有确定的名称?整个技术呢?由于不知道特定的术语,因此很难在野外搜索此示例或了解特定于语言的功能。 并非所有具有泛型的语言都具有此技术;这些语言中有类似技术的名称吗?

4
拥有诸如yield这样的生成器语言设施是一个好主意吗?
PHP,C#,Python和可能的其他几种语言都有yield用于创建生成器函数的关键字。 在PHP中:http://php.net/manual/en/language.generators.syntax.php 在Python中:https://www.pythoncentral.io/python-generators-and-yield-keyword/ 在C#中:https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/yield 我担心作为一种语言功能yield会破坏一些约定。其中之一就是我所说的“确定性”。该方法每次调用都会返回不同的结果。使用常规的非生成器函数,您可以调用它,并且如果给定相同的输入,它将返回相同的输出。使用yield时,它会根据其内部状态返回不同的输出。因此,如果您在不知道生成函数的先前状态的情况下随机调用生成函数,则不能指望它返回某个结果。 这样的功能如何适应语言范式?它实际上违反了任何约定吗?拥有并使用此功能是个好主意吗?(举例说明什么是好事,什么是坏事,goto这曾经是许多语言的功能,现在仍然是,但是它被认为是有害的,因此已经从某些语言(例如Java)中消除了)。编程语言的编译器/解释器是否必须突破任何约定才能实现此功能,例如,语言是否必须实现多线程才能使此功能正常工作,或者可以不使用线程技术来完成?

3
基于类型的不变量的函数编程答案是什么?
我知道不变性的概念存在于多种编程范例中。例如,循环不变式与OO,功能和过程编程有关。 但是,在OOP中发现的一种非常有用的类型是特定类型数据的不变性。这就是标题中所说的“基于类型的不变式”。例如,一个Fraction类型可能具有numerator和denominator,并且其gcd始终为1(即,分数为简化形式)是不变的。我只能通过某种类型的封装来保证这一点,而不是随意设置其数据。作为回报,我不必检查它是否减少了,因此我可以简化等式检查等算法。 另一方面,如果我只是声明一个Fraction类型而没有通过封装提供此保证,那么我就不能安全地在该类型上编写任何函数(假定分数减少了),因为将来有人可能会提出并添加一种方法掌握未减少的分数。 通常,缺少这种不变性可能导致: 需要在多个位置检查/确保前提条件的更复杂算法 DRY违规,因为这些重复的前提条件表示相同的基础知识(不变性应为真) 必须通过运行时故障而不是编译时保证来强制执行前提条件 所以我的问题是函数编程对这种不变性的回答是什么。是否有实现或多或少相同功能的惯用方式?还是功能编程的某些方面使收益的相关性降低?

3
正在使用具有可接受的副作用(REST)的PUT
每当用户更新表单时,我都想创建一个撤消历史记录。因为这是更新,所以我想使用PUT请求。但是,我读到PUT不需要有副作用。 在这里使用PUT是否可以接受?有更好的选择吗? PUT /person/F02E395A235 { time: 1234567, fields: { name: 'John', age: '41' } } 在服务器中 doPut('person/:personId', // create a new person snapshot ) 编辑: 用户可以看到该历史记录,多次调用将产生多个版本。 解决方案是在创建版本之前检查该版本是否唯一。

3
从哪里加载和存储文件设置?
我认为这个问题应该适用于大多数从文件加载设置的程序。我的问题是从编程的角度来看的,实际上这是如何从不同的类和可访问性方面处理从文件中加载设置的问题。例如: 如果程序有一个简单的settings.ini文件,则应将其内容加载到load()类的方法还是构造函数中? 值应该存储在public static变量中,还是应该有static获取和设置属性的方法? 如果文件不存在或无法读取该怎么办?您将如何让程序的其余部分知道它无法获得那些属性? 等等 我希望在这里的正确位置提出这个问题。我想让问题尽可能与语言无关,但我主要关注的是具有继承性的语言,尤其是Java和C#.NET。

6
如果模型正在验证数据,那么是否应该在输入错误时抛出异常?
读这个SO问题,似乎不赞成抛出用于验证用户输入的异常。 但是谁应该验证这些数据呢?在我的应用程序中,所有验证都是在业务层完成的,因为只有类本身才真正知道哪些值对其属性中的每个属性都有效。如果我要将用于验证属性的规则复制到控制器,则验证规则可能会更改,并且现在有两个地方需要进行修改。 我以为应该在业务层上进行验证的前提是否错误? 我做的事 因此,我的代码通常最终如下所示: <?php class Person { private $name; private $age; public function setName($n) { $n = trim($n); if (mb_strlen($n) == 0) { throw new ValidationException("Name cannot be empty"); } $this->name = $n; } public function setAge($a) { if (!is_int($a)) { if (!ctype_digit(trim($a))) { throw new ValidationException("Age $a …




By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.