if (borrower.creditScore < 600) {
scriptExit.withMessage 'Credit score of 600 required.'
}
// Everyone else qualifies. Find interest rate based on down payment percent.
result.qualified = true
result.message = 'Groovy! You qualify.'
switch (downPaymentPercent) {
case 0..5: result.interestRate = 0.08; break
case 6..10: result.interestRate = 0.075; break
case 11..15: result.interestRate = 0.07; break
case 16..20: result.interestRate = 0.065; break
default: result.interestRate = 0.06; break
}
请注意全局变量 result、borrower、loan 和 property,脚本使用这些变量访问和设置共享 Java 对象中的值。这些变量名是通过调用 ScriptEngine.put() 方法设置的。
还要注意 result.productName = 'Groovy Mortgage' 这样的 Groovy 语句。这个语句似乎是直接设置 MortgageQualificationResult 对象的字符串属性 productName,但是,清单 3 清楚地说明它是一个私有的实例变量。这并不 表示 Java 脚本编程 API 允许违反封装规则,而是说明通过使用 Java 脚本编程 API,Groovy 和大多数其他脚本语言解释器可以很好地操作共享的 Java 对象。如果一个 Groovy 语句尝试设置或读取 Java 对象的私有属性值,Groovy 就会寻找并使用 JavaBean 风格的公共 setter 或 getter 方法。例如,语句 result.productName = 'Groovy Mortgage' 会自动转换为适当的 Java 语句:result.setProductName("Groovy Mortgage")。这个 Java setter 语句也是有效的 Groovy 代码,可以在脚本中使用,但是直接使用属性赋值语句更符合 Groovy 的风格。
现在看看清单 5 中的 JavaScript 抵押产品脚本。这个 JavaScript 脚本代表一种政府担保的贷款,政府支持这种贷款是为了提高公民的住宅拥有率。所以,业务规则要求这是贷款人购买的第一套住宅,而且贷款人打算在此居住,而不是出租获利。
清单 5. JavaScript 抵押脚本
/**
* This script defines the "JavaScript FirstTime Mortgage" product.
* It is a government-sponsored mortgage intended for low-income, first-time
* home buyers without a lot of assets who intend to live in the home.
* Bankruptcies and bad (but not terrible!) credit are OK.
*/
result.productName = 'JavaScript FirstTime Mortgage'
if (!borrower.intendsToOccupy) {
result.message = 'This mortgage is not intended for investors.'
scriptExit.noMessage()
}
if (!borrower.firstTimeBuyer) {
result.message = 'Only first-time home buyers qualify for this mortgage.'
scriptExit.noMessage()
}
if (borrower.monthlyIncome > 4000) {
result.message = 'Monthly salary of $' + borrower.monthlyIncome +
' exceeds the $4,000 maximum.'
scriptExit.noMessage()
}
文章来源于领测软件测试网 https://www.ltesting.net/