📜  Julia 中的纯函数和修饰符

📅  最后修改于: 2021-11-25 04:47:37             🧑  作者: Mango

函数式编程现在非常普遍,我们必须编写一个函数来更新和修改变量,或者根据需要进行一些修改。在 Julia 中,我们有两种方法来更新和修改变量和对象,它们是纯函数,其他是修饰符,让我们通过示例一一查看。

纯函数

当我们处理一个函数并且不通过使用作为参数传递的对象来执行任何类型的更改时。或者我们可以说我们需要创建一个单独的同一个类的实例来更新变量并返回新更新的对象。

假设我们有一个student 结构体,该结构体具有学生姓名、学生名册编号、学生手机号码和学生地址等属性,我们正在初始化所有变量以进行演示。

Julia
# Create Structure Student 
struct Student
     name::String
     address::String
     roll::Integer
     mobile::Integer
end
  
# Initialize the Structure Student
gfg = Student("ABC", "DEF", 100, 100000000)


Julia
# Create a Function name changeMobile
  
function changeMobile(stud::Student, newmobile::Integer)
      name = stud.name
      address = stud.address
      roll = stud.roll
      demo_gfg = Student(name, address, roll, newmobile)
      return demo_gfg
end


Julia
# Use the changeMobile function 
changed_gfg = changeMobile(gfg, 400000000)
  
println(changed_gfg)


Julia
# Create Structure Student 
struct Car
     name::String
     number::String
     owner::String
     price::Float64
end
  
# Initialize the Structure Car
gfg = Car("ABC", "DL123", "Kiki", 45000.00)


Julia
# Create a Function name changePrice
  
function changePrice(car::Car, newprice::Float64)
      name = car.name
      number = car.number
      owner = car.owner
      gfg = Car(name, number, owner, newprice)
      return gfg
end


Julia
# Use the changePrice function 
gfg = changePrice(gfg, 500000.500)
  
println(gfg)


现在假设我们要更新学生的手机号码,我们必须做一个函数名changeMobile ,我们必须传递学生类型的对象,另一个是新的手机号码来获取更新并返回新的学生类型对象之后更新。

朱莉娅

# Create a Function name changeMobile
  
function changeMobile(stud::Student, newmobile::Integer)
      name = stud.name
      address = stud.address
      roll = stud.roll
      demo_gfg = Student(name, address, roll, newmobile)
      return demo_gfg
end

到目前为止,我们已经创建了我们的函数。现在我们必须使用这个函数来更新现有学生的手机号码,而不是直接改变变量。

朱莉娅

# Use the changeMobile function 
changed_gfg = changeMobile(gfg, 400000000)
  
println(changed_gfg)

输出 :

修饰符

当我们处理一个函数并通过使用作为参数传递的对象来执行任何类型的更改时。或者我们可以说我们不需要创建相同类的单独实例来更新变量并返回相同的更新对象。

假设我们有一个car 结构,该结构具有汽车名称、汽车编号、车主姓名和汽车价格等属性,我们正在初始化所有变量以进行演示。

朱莉娅

# Create Structure Student 
struct Car
     name::String
     number::String
     owner::String
     price::Float64
end
  
# Initialize the Structure Car
gfg = Car("ABC", "DL123", "Kiki", 45000.00)

现在假设我们必须更新汽车的价格,我们必须创建一个函数名称changePrice ,其中我们必须传递 Car 类型的对象,另一个是更新的汽车价格以获取更新并返回更新的同一 Car 实例类型对象。

朱莉娅

# Create a Function name changePrice
  
function changePrice(car::Car, newprice::Float64)
      name = car.name
      number = car.number
      owner = car.owner
      gfg = Car(name, number, owner, newprice)
      return gfg
end

到目前为止,我们已经创建了我们的函数。现在我们必须使用这个函数来更新现有汽车的价格,而不是直接改变变量。

朱莉娅

# Use the changePrice function 
gfg = changePrice(gfg, 500000.500)
  
println(gfg)

输出 :

我们应该更喜欢哪种方法来编写任何函数?

我们总是需要更喜欢纯函数方法 因为我们不会丢失原始数据,并且也可以更新我们可以工作的数据。与使用修饰符的程序相比,这种方法创建的函数开发速度更快,出错的可能性