├── .idea
├── .gitignore
├── codeStyles
│ ├── Project.xml
│ └── codeStyleConfig.xml
├── kotlinc.xml
├── libraries
│ └── KotlinJavaRuntime.xml
├── misc.xml
├── modules.xml
├── uiDesigner.xml
└── vcs.xml
├── DeclarativeProgramming.iml
├── README.md
├── out
└── production
│ └── DeclarativeProgramming
│ ├── META-INF
│ └── DeclarativeProgramming.kotlin_module
│ ├── models
│ ├── Availability.class
│ ├── Customer.class
│ ├── Freight.class
│ ├── Invoice.class
│ ├── MyOrder.class
│ ├── Shipping.class
│ └── ShippingDate.class
│ ├── session1
│ ├── Hello.class
│ └── Session1Kt.class
│ ├── session2
│ └── Session2Kt.class
│ ├── session3
│ ├── Order.class
│ ├── Product.class
│ ├── Session3Kt$getBeverageParameters$1.class
│ ├── Session3Kt$getFoodParameters$1.class
│ ├── Session3Kt$getRawMaterialParameters$1.class
│ └── Session3Kt.class
│ ├── session4
│ ├── Session4Kt$calcA$1.class
│ ├── Session4Kt$calcB$1.class
│ ├── Session4Kt$calcC$1.class
│ ├── Session4Kt$isAQualified$1.class
│ ├── Session4Kt$isBQualified$1.class
│ ├── Session4Kt$isCQualified$1.class
│ └── Session4Kt.class
│ ├── session5
│ ├── Session5Kt$compose$1.class
│ ├── Session5Kt$composeFunction$1.class
│ ├── Session5Kt$lambdaAddOne$1.class
│ ├── Session5Kt$lambdaSquare$1.class
│ ├── Session5Kt$lambdaSubtractTen$1.class
│ └── Session5Kt.class
│ ├── session6
│ ├── AvailabilityChoice.class
│ ├── AvailabilityPath$calcAvailability1$1.class
│ ├── AvailabilityPath$calcAvailability2$1.class
│ ├── AvailabilityPath$calcAvailability3$1.class
│ ├── AvailabilityPath$calcAvailability4$1.class
│ ├── AvailabilityPath$calcShippingDate1$1.class
│ ├── AvailabilityPath$calcShippingDate2$1.class
│ ├── AvailabilityPath$calcShippingDate3$1.class
│ ├── AvailabilityPath$calcShippingDate4$1.class
│ ├── AvailabilityPath$calcShippingDate5$1.class
│ ├── AvailabilityPath.class
│ ├── FreightChoice.class
│ ├── InvoiceChoice.class
│ ├── InvoicePath$calcFreightCost1$1.class
│ ├── InvoicePath$calcFreightCost2$1.class
│ ├── InvoicePath$calcFreightCost3$1.class
│ ├── InvoicePath$calcFreightCost4$1.class
│ ├── InvoicePath$calcFreightCost5$1.class
│ ├── InvoicePath$calcFreightCost6$1.class
│ ├── InvoicePath$calcInvoice1$1.class
│ ├── InvoicePath$calcInvoice2$1.class
│ ├── InvoicePath$calcInvoice3$1.class
│ ├── InvoicePath$calcInvoice4$1.class
│ ├── InvoicePath$calcInvoice5$1.class
│ ├── InvoicePath$calcShipping1$1.class
│ ├── InvoicePath$calcShipping2$1.class
│ ├── InvoicePath$calcShipping3$1.class
│ ├── InvoicePath.class
│ ├── ProcessConfiguration.class
│ ├── Session6Kt$calcAdjustedCostOfOrder$1.class
│ ├── Session6Kt$compose$1.class
│ ├── Session6Kt.class
│ ├── ShippingChoice.class
│ └── ShippingDateChoice.class
│ ├── session7
│ ├── SessionKt$grossSalaryCalculator$1.class
│ ├── SessionKt$test$1.class
│ └── SessionKt.class
│ └── session8
│ ├── Session8Kt$lambdaAddOne$1.class
│ ├── Session8Kt$lambdaSquare$1.class
│ ├── Session8Kt$lambdaSubtractTen$1.class
│ └── Session8Kt.class
└── src
└── main
└── kotlin
├── models
├── Availability.kt
├── Customer.kt
├── Freight.kt
├── Invoice.kt
├── MyOrder.kt
├── Shipping.kt
└── ShippingDate.kt
├── session1
└── Session1.kt
├── session2
└── Session2.kt
├── session3
├── Order.kt
└── Session3.kt
├── session4
└── Session4.kt
├── session5
└── Session5.kt
├── session6
├── AvailabilityPath.kt
├── InvoicePath.kt
├── ProcessConfiguration.kt
└── Session6.kt
└── session7
└── Session.kt
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 |
--------------------------------------------------------------------------------
/.idea/codeStyles/Project.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
11 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/.idea/codeStyles/codeStyleConfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/.idea/kotlinc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/.idea/libraries/KotlinJavaRuntime.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/uiDesigner.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | -
6 |
7 |
8 | -
9 |
10 |
11 | -
12 |
13 |
14 | -
15 |
16 |
17 | -
18 |
19 |
20 |
21 |
22 |
23 | -
24 |
25 |
26 |
27 |
28 |
29 | -
30 |
31 |
32 |
33 |
34 |
35 | -
36 |
37 |
38 |
39 |
40 |
41 | -
42 |
43 |
44 |
45 |
46 | -
47 |
48 |
49 |
50 |
51 | -
52 |
53 |
54 |
55 |
56 | -
57 |
58 |
59 |
60 |
61 | -
62 |
63 |
64 |
65 |
66 | -
67 |
68 |
69 |
70 |
71 | -
72 |
73 |
74 | -
75 |
76 |
77 |
78 |
79 | -
80 |
81 |
82 |
83 |
84 | -
85 |
86 |
87 |
88 |
89 | -
90 |
91 |
92 |
93 |
94 | -
95 |
96 |
97 |
98 |
99 | -
100 |
101 |
102 | -
103 |
104 |
105 | -
106 |
107 |
108 | -
109 |
110 |
111 | -
112 |
113 |
114 |
115 |
116 | -
117 |
118 |
119 | -
120 |
121 |
122 |
123 |
124 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/DeclarativeProgramming.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/META-INF/DeclarativeProgramming.kotlin_module:
--------------------------------------------------------------------------------
1 |
2 |
3 | session1
4 | Session1Kt
5 |
6 | session2
7 | Session2Kt
8 |
9 | session3
10 | Session3Kt
11 |
12 | session4
13 | Session4Kt
14 |
15 | session5
16 | Session5Kt
17 |
18 | session6
19 | Session6Kt
20 |
21 | session7 SessionKt
22 |
23 | session8
24 | Session8Kt" *
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/models/Availability.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/models/Availability.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/models/Customer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/models/Customer.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/models/Freight.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/models/Freight.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/models/Invoice.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/models/Invoice.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/models/MyOrder.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/models/MyOrder.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/models/Shipping.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/models/Shipping.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/models/ShippingDate.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/models/ShippingDate.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session1/Hello.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session1/Hello.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session1/Session1Kt.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session1/Session1Kt.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session2/Session2Kt.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session2/Session2Kt.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session3/Order.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session3/Order.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session3/Product.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session3/Product.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session3/Session3Kt$getBeverageParameters$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session3/Session3Kt$getBeverageParameters$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session3/Session3Kt$getFoodParameters$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session3/Session3Kt$getFoodParameters$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session3/Session3Kt$getRawMaterialParameters$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session3/Session3Kt$getRawMaterialParameters$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session3/Session3Kt.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session3/Session3Kt.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session4/Session4Kt$calcA$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session4/Session4Kt$calcA$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session4/Session4Kt$calcB$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session4/Session4Kt$calcB$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session4/Session4Kt$calcC$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session4/Session4Kt$calcC$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session4/Session4Kt$isAQualified$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session4/Session4Kt$isAQualified$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session4/Session4Kt$isBQualified$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session4/Session4Kt$isBQualified$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session4/Session4Kt$isCQualified$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session4/Session4Kt$isCQualified$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session4/Session4Kt.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session4/Session4Kt.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session5/Session5Kt$compose$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session5/Session5Kt$compose$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session5/Session5Kt$composeFunction$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session5/Session5Kt$composeFunction$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session5/Session5Kt$lambdaAddOne$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session5/Session5Kt$lambdaAddOne$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session5/Session5Kt$lambdaSquare$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session5/Session5Kt$lambdaSquare$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session5/Session5Kt$lambdaSubtractTen$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session5/Session5Kt$lambdaSubtractTen$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session5/Session5Kt.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session5/Session5Kt.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/AvailabilityChoice.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/AvailabilityChoice.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/AvailabilityPath$calcAvailability1$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/AvailabilityPath$calcAvailability1$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/AvailabilityPath$calcAvailability2$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/AvailabilityPath$calcAvailability2$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/AvailabilityPath$calcAvailability3$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/AvailabilityPath$calcAvailability3$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/AvailabilityPath$calcAvailability4$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/AvailabilityPath$calcAvailability4$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/AvailabilityPath$calcShippingDate1$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/AvailabilityPath$calcShippingDate1$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/AvailabilityPath$calcShippingDate2$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/AvailabilityPath$calcShippingDate2$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/AvailabilityPath$calcShippingDate3$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/AvailabilityPath$calcShippingDate3$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/AvailabilityPath$calcShippingDate4$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/AvailabilityPath$calcShippingDate4$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/AvailabilityPath$calcShippingDate5$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/AvailabilityPath$calcShippingDate5$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/AvailabilityPath.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/AvailabilityPath.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/FreightChoice.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/FreightChoice.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/InvoiceChoice.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/InvoiceChoice.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/InvoicePath$calcFreightCost1$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/InvoicePath$calcFreightCost1$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/InvoicePath$calcFreightCost2$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/InvoicePath$calcFreightCost2$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/InvoicePath$calcFreightCost3$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/InvoicePath$calcFreightCost3$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/InvoicePath$calcFreightCost4$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/InvoicePath$calcFreightCost4$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/InvoicePath$calcFreightCost5$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/InvoicePath$calcFreightCost5$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/InvoicePath$calcFreightCost6$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/InvoicePath$calcFreightCost6$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/InvoicePath$calcInvoice1$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/InvoicePath$calcInvoice1$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/InvoicePath$calcInvoice2$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/InvoicePath$calcInvoice2$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/InvoicePath$calcInvoice3$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/InvoicePath$calcInvoice3$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/InvoicePath$calcInvoice4$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/InvoicePath$calcInvoice4$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/InvoicePath$calcInvoice5$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/InvoicePath$calcInvoice5$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/InvoicePath$calcShipping1$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/InvoicePath$calcShipping1$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/InvoicePath$calcShipping2$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/InvoicePath$calcShipping2$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/InvoicePath$calcShipping3$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/InvoicePath$calcShipping3$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/InvoicePath.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/InvoicePath.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/ProcessConfiguration.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/ProcessConfiguration.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/Session6Kt$calcAdjustedCostOfOrder$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/Session6Kt$calcAdjustedCostOfOrder$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/Session6Kt$compose$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/Session6Kt$compose$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/Session6Kt.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/Session6Kt.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/ShippingChoice.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/ShippingChoice.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session6/ShippingDateChoice.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session6/ShippingDateChoice.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session7/SessionKt$grossSalaryCalculator$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session7/SessionKt$grossSalaryCalculator$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session7/SessionKt$test$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session7/SessionKt$test$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session7/SessionKt.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session7/SessionKt.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session8/Session8Kt$lambdaAddOne$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session8/Session8Kt$lambdaAddOne$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session8/Session8Kt$lambdaSquare$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session8/Session8Kt$lambdaSquare$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session8/Session8Kt$lambdaSubtractTen$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session8/Session8Kt$lambdaSubtractTen$1.class
--------------------------------------------------------------------------------
/out/production/DeclarativeProgramming/session8/Session8Kt.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eslamalaaeddin/DeclarativeProgramming/223817871545b05d40f8503f1c0ae2d1eb3e4dbb/out/production/DeclarativeProgramming/session8/Session8Kt.class
--------------------------------------------------------------------------------
/src/main/kotlin/models/Availability.kt:
--------------------------------------------------------------------------------
1 | package models
2 |
3 | import java.time.LocalDate
4 | import java.util.*
5 |
6 | data class Availability(val date: LocalDate? = null)
--------------------------------------------------------------------------------
/src/main/kotlin/models/Customer.kt:
--------------------------------------------------------------------------------
1 | package models
2 |
3 | class Customer {
4 | }
--------------------------------------------------------------------------------
/src/main/kotlin/models/Freight.kt:
--------------------------------------------------------------------------------
1 | package models
2 |
3 | data class Freight(val cost: Double = 0.0)
--------------------------------------------------------------------------------
/src/main/kotlin/models/Invoice.kt:
--------------------------------------------------------------------------------
1 | package models
2 |
3 | data class Invoice(
4 | val cost: Double = 0.0
5 | )
--------------------------------------------------------------------------------
/src/main/kotlin/models/MyOrder.kt:
--------------------------------------------------------------------------------
1 | package models
2 |
3 | import java.time.LocalDate
4 | import java.util.*
5 |
6 | data class MyOrder(var customer: Customer? = null, var date: LocalDate? = null, var cost: Double = 0.0)
--------------------------------------------------------------------------------
/src/main/kotlin/models/Shipping.kt:
--------------------------------------------------------------------------------
1 | package models
2 |
3 | data class Shipping(val cost: Double = 0.0, val shipperId: Int? = null)
--------------------------------------------------------------------------------
/src/main/kotlin/models/ShippingDate.kt:
--------------------------------------------------------------------------------
1 | package models
2 |
3 | import java.time.LocalDate
4 | import java.util.*
5 |
6 | data class ShippingDate(val date: LocalDate? = null)
--------------------------------------------------------------------------------
/src/main/kotlin/session1/Session1.kt:
--------------------------------------------------------------------------------
1 | package session1
2 |
3 | fun main() {
4 | val hello = Hello(0,0)
5 |
6 | hello.updateX(4)
7 | hello.updateY(2)
8 |
9 | println(hello.getZ())
10 | }
11 |
12 | class Hello(x1: Int, y1: Int) {
13 | private var x = x1
14 | private var y = y1
15 |
16 | fun updateX(v: Int) {
17 | x = v * 2
18 | }
19 |
20 | fun updateY(v: Int) {
21 | y = v * 3
22 | }
23 |
24 | fun getZ() = if (x > 10) x * 2 + 3 * y else x * 3 + 2 * y
25 | }
--------------------------------------------------------------------------------
/src/main/kotlin/session2/Session2.kt:
--------------------------------------------------------------------------------
1 | package session2
2 |
3 | fun main() {
4 | val numbers = listOf(7, 4, 5, 6, 3, 8, 10)
5 |
6 | //Imperative
7 | for (x in numbers) { println(subtractTen(square(addOne(x)))) }
8 |
9 | println("\n--------------------------")
10 |
11 | //Declarative
12 | numbers
13 | .map(::addOne)
14 | .map(::square)
15 | .filter { it < 70 }
16 | .sorted()
17 | .take(2)
18 | .map(::subtractTen)
19 | .forEach(::println)
20 | }
21 |
22 | fun square(n: Int) = n * n
23 | fun addOne(n: Int) = n + 1
24 | fun subtractTen(n: Int) = n - 10
25 |
--------------------------------------------------------------------------------
/src/main/kotlin/session3/Order.kt:
--------------------------------------------------------------------------------
1 | package session3
2 |
3 | data class Order(
4 | val orderId: Int,
5 | val productIndex: Int,
6 | val quantity: Int,
7 | val unitPrice: Int,
8 | var disocunt: Double = 0.0
9 | ){
10 | override fun toString(): String {
11 | return "Discount: $disocunt"
12 | }
13 | }
--------------------------------------------------------------------------------
/src/main/kotlin/session3/Session3.kt:
--------------------------------------------------------------------------------
1 | package session3
2 |
3 |
4 | fun main() {
5 | //val doubleLambda = { number: Double -> number }
6 |
7 | // //Regular invocation
8 | // println(test2(test1(5.0)))
9 | // println(test1(test2(5.0)))
10 | //
11 | // //Using HOF
12 | // println(test3(test1(5.0), doubleLambda, 5.0))
13 | // println(test3(test2(5.0), doubleLambda, 5.0))
14 |
15 | val product = Product.RAW_MATERIAL
16 | val order = Order(10, 100, 20, 4)
17 |
18 | val parameters =
19 | if (product == Product.FOOD) getFoodParameters else (if (product == Product.BEVERAGE) getBeverageParameters else getRawMaterialParameters)
20 |
21 | println(calculateDiscount(parameters, order))
22 | }
23 |
24 | enum class Product { FOOD, BEVERAGE, RAW_MATERIAL }
25 |
26 | fun test1(x: Double): Double = x / 2
27 |
28 | fun test2(x: Double): Double = x / 4 + 1
29 |
30 | fun test3(num1: Double, doubleLambda: (Double) -> Double, num2: Double): Double {
31 | return doubleLambda.invoke(num1) + num2
32 | }
33 |
34 | val getFoodParameters : (Int) -> Pair =
35 | { productIndex: Int -> Pair(productIndex / productIndex + 100.0, productIndex / productIndex + 300.0) }
36 |
37 | val getBeverageParameters : (Int) -> Pair =
38 | { productIndex: Int -> Pair(productIndex / productIndex + 300.0, productIndex / productIndex + 400.0) }
39 |
40 | val getRawMaterialParameters : (Int) -> Pair =
41 | { productIndex: Int -> Pair(productIndex / productIndex + 400.0, productIndex / productIndex + 700.0) }
42 |
43 |
44 | private fun calculateDiscount(lambdaCalcParameters: (Int) -> Pair, order: Order): Double {
45 | val parameters = lambdaCalcParameters(order.productIndex)
46 | return parameters.first * order.quantity + parameters.second * order.unitPrice
47 | }
48 |
49 |
--------------------------------------------------------------------------------
/src/main/kotlin/session4/Session4.kt:
--------------------------------------------------------------------------------
1 | package session4
2 |
3 | import session3.Order
4 |
5 | val isAQualified: (Order) -> Boolean = { order: Order -> true }
6 | val calcA: (Order) -> Double = { order: Order -> 10.0 }
7 |
8 | val isBQualified: (Order) -> Boolean = { order: Order -> true }
9 | val calcB: (Order) -> Double = { order: Order -> 20.0 }
10 |
11 | val isCQualified: (Order) -> Boolean = { order: Order -> true }
12 | val calcC: (Order) -> Double = { order: Order -> 30.0 }
13 |
14 | //If we want to add a new rule and add a new pair containing them to rules list
15 | //val isDQualified: (session3.Order) -> Boolean = { order: session3.Order -> true }
16 | //val calcD: (session3.Order) -> Double = { order: session3.Order -> 3=40.0 }
17 |
18 | fun main() {
19 |
20 | val orders = listOf(
21 | Order(1, 100, 10, 10),
22 | Order(2, 200, 20, 20),
23 | Order(3, 300, 30, 30),
24 | Order(4, 400, 40, 40),
25 | Order(5, 500, 50, 50),
26 | Order(6, 600, 60, 60),
27 | Order(7, 700, 70, 70),
28 | Order(8, 800, 80, 80),
29 | Order(9, 900, 90, 90),
30 | )
31 |
32 | val rules: List Boolean, (Order) -> Double>> = listOf(
33 | Pair(isAQualified, calcA),
34 | Pair(isBQualified, calcB),
35 | Pair(isCQualified, calcC)
36 | )
37 |
38 | orders.forEach { order -> println(getOrderWithDiscount(order, rules)) }
39 |
40 |
41 | }
42 |
43 | fun getOrderWithDiscount(order: Order, rules: List Boolean, (Order) -> Double>>): Order {
44 | val discount: Double = rules
45 | .filter { pair -> pair.first.invoke(order) }
46 | .map { pair -> pair.second.invoke(order) }
47 | .sorted()
48 | .take(3)
49 | .average()
50 |
51 | //Will be replaced -- Immutability concept
52 | val newOrder: Order = order.copy()
53 | newOrder.disocunt = discount
54 |
55 | return newOrder
56 | }
57 |
--------------------------------------------------------------------------------
/src/main/kotlin/session5/Session5.kt:
--------------------------------------------------------------------------------
1 | package session5
2 |
3 | val myData = listOf(3.0, 5.0, 7.0, 8.0)
4 |
5 | fun main() {
6 | // val myFunctionTest: (Double) -> Double = test()
7 | // println(myFunctionTest.invoke(1.0))
8 |
9 |
10 | println(myData
11 | .map { n -> addOne(n) }
12 | .map { n -> square(n) }
13 | .map { n -> subtractTen(n) })
14 |
15 |
16 | //Compact
17 | println(myData.map { n -> subtractTen(square(addOne(n))) })
18 |
19 |
20 | //Composed
21 | println(myData.map { n -> myComposedFunction().invoke(n) })
22 |
23 |
24 | //Using the beautiful composer :)
25 | println(myData.map { n -> addOneSquareSubtractTen().invoke(n) })
26 |
27 | }
28 |
29 | //fun test(): (Double) -> Double = { x: Double -> x + 1 }
30 |
31 | fun addOne(num: Double) = num + 1
32 | fun square(num: Double) = num * num
33 | fun subtractTen(num: Double) = num - 10
34 |
35 | val lambdaAddOne: (Double) -> Double = { n -> n + 1 }
36 | val lambdaSquare: (Double) -> Double = { n -> n * n }
37 | val lambdaSubtractTen: (Double) -> Double = { n -> n - 10 }
38 |
39 | fun myComposedFunction(): (Double) -> Double = composeFunction(lambdaAddOne, lambdaSquare, lambdaSubtractTen)
40 |
41 | fun composeFunction(
42 | addOne: (Double) -> Double,
43 | square: (Double) -> Double,
44 | subtractTen: (Double) -> Double
45 | ): (Double) -> Double {
46 | return { number -> subtractTen.invoke(square.invoke(addOne.invoke(number))) }
47 | }
48 |
49 | fun addOneSquareSubtractTen(): (Double) -> Double{
50 | return compose(compose(lambdaAddOne, lambdaSquare), lambdaSubtractTen)
51 | }
52 |
53 | fun compose(fun1: (T1) -> T2, fun2: (T2) -> T3): (T1) -> T3 {
54 | return { t -> fun2.invoke(fun1.invoke(t)) }
55 | }
56 |
--------------------------------------------------------------------------------
/src/main/kotlin/session6/AvailabilityPath.kt:
--------------------------------------------------------------------------------
1 | package session6
2 |
3 | import models.Availability
4 | import models.MyOrder
5 | import models.ShippingDate
6 | import java.time.LocalDate
7 |
8 | class AvailabilityPath {
9 |
10 | private val calcAvailability1: (MyOrder) -> Availability = { order -> Availability(date = LocalDate.now().plusDays(3))}
11 | private val calcAvailability2: (MyOrder) -> Availability = { order -> Availability(date = LocalDate.now().plusDays(2))}
12 | private val calcAvailability3: (MyOrder) -> Availability = { order -> Availability(date = LocalDate.now().plusDays(1))}
13 | private val calcAvailability4: (MyOrder) -> Availability = { order -> Availability(date = LocalDate.now().plusDays(4))}
14 |
15 |
16 | private val calcShippingDate1: (Availability) -> ShippingDate = {a -> ShippingDate(date = LocalDate.now().plusDays(1))}
17 | private val calcShippingDate2: (Availability) -> ShippingDate = {a -> ShippingDate(date = LocalDate.now().plusDays(2))}
18 | private val calcShippingDate3: (Availability) -> ShippingDate = {a -> ShippingDate(date = LocalDate.now().plusDays(1/2 ))}
19 | private val calcShippingDate4: (Availability) -> ShippingDate = {a -> ShippingDate(date = LocalDate.now().plusDays(4/5))}
20 | private val calcShippingDate5: (Availability) -> ShippingDate = {a -> ShippingDate(date = LocalDate.now().plusDays(2/5))}
21 |
22 |
23 | val availabilityLambdas: List Availability>> = listOf(
24 | Pair(AvailabilityChoice.AV1,calcAvailability1),
25 | Pair(AvailabilityChoice.AV2,calcAvailability2),
26 | Pair(AvailabilityChoice.AV3,calcAvailability3),
27 | Pair(AvailabilityChoice.AV4,calcAvailability4)
28 | )
29 |
30 | val shippingDateLambdas: List ShippingDate>> = listOf(
31 | Pair(ShippingDateChoice.SD1,calcShippingDate1),
32 | Pair(ShippingDateChoice.SD2,calcShippingDate2),
33 | Pair(ShippingDateChoice.SD3,calcShippingDate3),
34 | Pair(ShippingDateChoice.SD4,calcShippingDate4),
35 | Pair(ShippingDateChoice.SD5,calcShippingDate5),
36 | )
37 |
38 |
39 |
40 |
41 | }
--------------------------------------------------------------------------------
/src/main/kotlin/session6/InvoicePath.kt:
--------------------------------------------------------------------------------
1 | package session6
2 |
3 | import models.*
4 | import session6.FreightChoice
5 | import session6.InvoiceChoice
6 | import session6.ShippingChoice
7 |
8 | class InvoicePath {
9 |
10 | private val calcInvoice1 : (MyOrder) -> Invoice = {order -> Invoice(order.cost * 1.1) }
11 | private val calcInvoice2 : (MyOrder) -> Invoice = {order -> Invoice(order.cost * 1.2) }
12 | private val calcInvoice3 : (MyOrder) -> Invoice = {order -> Invoice(order.cost * 1.3) }
13 | private val calcInvoice4 : (MyOrder) -> Invoice = {order -> Invoice(order.cost * 1.4) }
14 | private val calcInvoice5 : (MyOrder) -> Invoice = {order -> Invoice(order.cost * 1.5) }
15 |
16 |
17 | private val calcShipping1: (Invoice) -> Shipping = {invoice -> Shipping(cost = invoice.cost, shipperId = if (invoice.cost > 1000) 1 else 2) }
18 | private val calcShipping2: (Invoice) -> Shipping = {invoice -> Shipping(cost = invoice.cost, shipperId = if (invoice.cost > 1100) 1 else 2) }
19 | private val calcShipping3: (Invoice) -> Shipping = {invoice -> Shipping(cost = invoice.cost, shipperId = if (invoice.cost > 1200) 1 else 2) }
20 |
21 |
22 | private val calcFreightCost1: (Shipping) -> Freight = {s -> Freight(cost = if (s.shipperId == 1) s.cost * .25 else s.cost * .5) }
23 | private val calcFreightCost2: (Shipping) -> Freight = {s -> Freight(cost = if (s.shipperId == 1) s.cost * .28 else s.cost * .52) }
24 | private val calcFreightCost3: (Shipping) -> Freight = {s -> Freight(cost = if (s.shipperId == 1) s.cost * .3 else s.cost * .6) }
25 | private val calcFreightCost4: (Shipping) -> Freight = {s -> Freight(cost = if (s.shipperId == 1) s.cost * .35 else s.cost * .65) }
26 | private val calcFreightCost5: (Shipping) -> Freight = {s -> Freight(cost = if (s.shipperId == 1) s.cost * .15 else s.cost * .2) }
27 | private val calcFreightCost6: (Shipping) -> Freight = {s -> Freight(cost = if (s.shipperId == 1) s.cost * .1 else s.cost * .15) }
28 |
29 |
30 |
31 |
32 | val invoiceLambdas: List Invoice>> = listOf(
33 | Pair(InvoiceChoice.Inv1,calcInvoice1),
34 | Pair(InvoiceChoice.Inv2,calcInvoice2),
35 | Pair(InvoiceChoice.Inv3,calcInvoice3),
36 | Pair(InvoiceChoice.Inv4,calcInvoice4),
37 | Pair(InvoiceChoice.Inv5,calcInvoice5)
38 | )
39 |
40 | val shippingLambdas: List Shipping>> = listOf(
41 | Pair(ShippingChoice.Sh1,calcShipping1),
42 | Pair(ShippingChoice.Sh2,calcShipping2),
43 | Pair(ShippingChoice.Sh3,calcShipping3)
44 | )
45 |
46 | val freightLambdas: List Freight>> = listOf(
47 | Pair(FreightChoice.FR1,calcFreightCost1),
48 | Pair(FreightChoice.FR2,calcFreightCost2),
49 | Pair(FreightChoice.FR3,calcFreightCost3),
50 | Pair(FreightChoice.FR4,calcFreightCost4),
51 | Pair(FreightChoice.FR5,calcFreightCost5),
52 | Pair(FreightChoice.FR6,calcFreightCost6)
53 | )
54 |
55 |
56 |
57 |
58 |
59 | }
--------------------------------------------------------------------------------
/src/main/kotlin/session6/ProcessConfiguration.kt:
--------------------------------------------------------------------------------
1 | package session6
2 |
3 | class ProcessConfiguration {
4 |
5 | lateinit var invoiceChoice: InvoiceChoice
6 | lateinit var shippingChoice: ShippingChoice
7 | lateinit var freightChoice: FreightChoice
8 | lateinit var availabilityChoice: AvailabilityChoice
9 | lateinit var shippingDateChoice: ShippingDateChoice
10 | }
11 |
12 | enum class InvoiceChoice {
13 | Inv1,
14 | Inv2,
15 | Inv3,
16 | Inv4,
17 | Inv5
18 | }
19 |
20 | enum class ShippingChoice {
21 | Sh1,
22 | Sh2,
23 | Sh3,
24 | }
25 |
26 | enum class FreightChoice {
27 | FR1,
28 | FR2,
29 | FR3,
30 | FR4,
31 | FR5,
32 | FR6
33 | }
34 |
35 | enum class AvailabilityChoice {
36 | AV1,
37 | AV2,
38 | AV3,
39 | AV4
40 | }
41 |
42 | enum class ShippingDateChoice {
43 | SD1,
44 | SD2,
45 | SD3,
46 | SD4,
47 | SD5
48 | }
--------------------------------------------------------------------------------
/src/main/kotlin/session6/Session6.kt:
--------------------------------------------------------------------------------
1 | package session6
2 |
3 | import models.Customer
4 | import models.Freight
5 | import models.MyOrder
6 | import models.ShippingDate
7 | import java.time.LocalDate
8 |
9 |
10 | fun main() {
11 | val invoicePath = InvoicePath()
12 | val availabilityPath = AvailabilityPath()
13 | val configs: Pair = setConfiguration()
14 |
15 | val processConfiguration = ProcessConfiguration()
16 | processConfiguration.invoiceChoice = InvoiceChoice.Inv3
17 | processConfiguration.shippingChoice = ShippingChoice.Sh2
18 | processConfiguration.freightChoice = FreightChoice.FR3
19 | processConfiguration.availabilityChoice = AvailabilityChoice.AV2
20 | processConfiguration.shippingDateChoice = ShippingDateChoice.SD2
21 |
22 | val costOfOrder : (MyOrder) -> Double =calcAdjustedCostOfOrder(processConfiguration, invoicePath, availabilityPath)
23 |
24 | val order = MyOrder(Customer(), LocalDate.now(), 250.0)
25 |
26 | println(costOfOrder.invoke(order))
27 |
28 | }
29 |
30 | fun setConfiguration(): Pair {
31 | val processConfiguration = ProcessConfiguration()
32 | val customer = Customer()
33 | val order = MyOrder()
34 |
35 | processConfiguration.invoiceChoice = InvoiceChoice.Inv3
36 | processConfiguration.shippingChoice = ShippingChoice.Sh2
37 | processConfiguration.freightChoice = FreightChoice.FR3
38 | processConfiguration.availabilityChoice = AvailabilityChoice.AV2
39 | processConfiguration.shippingDateChoice = ShippingDateChoice.SD2
40 | order.customer = customer
41 | order.date = LocalDate.now()
42 | order.cost = 2000.0
43 |
44 | return Pair(order, processConfiguration)
45 | }
46 |
47 |
48 | private fun calcAdjustedCostOfOrder(
49 | processConfig: ProcessConfiguration,
50 | invoicePath: InvoicePath,
51 | availabilityPath: AvailabilityPath
52 | ): (MyOrder) -> Double {
53 | return { order ->
54 | adjustCost(
55 | order,
56 | invoicePath(processConfig, invoicePath),
57 | availabilityPath(processConfig, availabilityPath)
58 | )
59 | }
60 | }
61 |
62 |
63 | private fun adjustCost(
64 | order: MyOrder,
65 | calcFreight: (MyOrder) -> Freight,
66 | calcShippingDate: (MyOrder) -> ShippingDate
67 | ): Double {
68 | val freight = calcFreight(order)
69 | val shippingDate = calcShippingDate(order)
70 |
71 | val cost = if (shippingDate.date?.dayOfWeek.toString() == "Monday") freight.cost + 1000 else freight.cost + 500
72 |
73 | return cost
74 | }
75 |
76 | private fun invoicePath(processConfig: ProcessConfiguration, invoicePath: InvoicePath): (MyOrder) -> Freight {
77 |
78 | return compose(
79 | compose(
80 | invoicePath.invoiceLambdas.filter { it.first == processConfig.invoiceChoice }.map { it.second }.first(),
81 | invoicePath.shippingLambdas.filter { it.first == processConfig.shippingChoice }.map { it.second }.first()
82 | ),
83 |
84 | invoicePath.freightLambdas.filter { it.first == processConfig.freightChoice }.map { it.second }.first()
85 | )
86 |
87 | }
88 |
89 | private fun availabilityPath(
90 | processConfig: ProcessConfiguration,
91 | availabilityPath: AvailabilityPath
92 | ): (MyOrder) -> ShippingDate {
93 | return compose(
94 | availabilityPath.availabilityLambdas.filter { it.first == processConfig.availabilityChoice }.map { it.second }
95 | .first(),
96 | availabilityPath.shippingDateLambdas.filter { it.first == processConfig.shippingDateChoice }.map { it.second }
97 | .first()
98 | )
99 | }
100 |
101 |
102 | fun compose(fun1: (T1) -> T2, fun2: (T2) -> T3): (T1) -> T3 {
103 | return { t -> fun2.invoke(fun1.invoke(t)) }
104 | }
--------------------------------------------------------------------------------
/src/main/kotlin/session7/Session.kt:
--------------------------------------------------------------------------------
1 | package session7
2 |
3 | fun main() {
4 | // val q10 = test(10.0)
5 | // println(q10.invoke(4.0))
6 |
7 | val segmentSalaryPairs: List> = listOf(
8 | Pair("a", 1000.0),
9 | Pair("b", 2000.0),
10 | Pair("c", 3000.0)
11 | )
12 |
13 | val grossSalaryCalculators: List Double>> =
14 | segmentSalaryPairs.map { Pair(it.first, grossSalaryCalculator(it.second)) }
15 |
16 |
17 | println(grossSalaryCalculators[0].second.invoke(80.0))
18 | println(grossSalaryCalculators[1].second.invoke(90.0))
19 | println(grossSalaryCalculators.first { it.first == "c" }.second.invoke(100.0))
20 |
21 | }
22 |
23 | private fun test(number: Double): (Double) -> Double {
24 | val x1 = number + 10
25 | return { num -> num + x1 }
26 | }
27 |
28 | private fun grossSalaryCalculator(basicSalary: Double): (Double) -> Double {
29 | val tax = .2 * basicSalary
30 | return { bonus -> bonus + tax + basicSalary }
31 | }
--------------------------------------------------------------------------------