Size: a a a

F# Flood: Be a cheif

2021 January 27

AH

Ayrat Hudaygulov in F# Flood: Be a cheif
у него некоторые пассажи прям намекают
источник

IC

Ilya Chernoudov in F# Flood: Be a cheif
Roman
Ну так может ты уже перестанешь страдать хуйней и покажешь на сишарпе, что ты имеешь ввиду?
пример простой
источник

R

Roman in F# Flood: Be a cheif
Ilya Chernoudov
пример простой
и ты считаешь, что это нормальный код?
источник

IC

Ilya Chernoudov in F# Flood: Be a cheif
Ayrat Hudaygulov
    let getPriceControl priceControlOverride
                       priceControlBrandRules
                       priceControlCategoryRules
                       priceControlsManufacturerCatalog
                       priceControlDefaultRule
                       taxonomyItems
                       (approvedCompetitiveSourcesMap: Map<RegionId, string Set>)
                       (isOnePNode: NodeId->bool)
                       (brandOption: string option)
                       (offersMap: Map<RegionId, OfferAndShippingCost[]>)
                       (retailSku: SlimmedRetailSku)
                       (marginBasedPricingMap: Map<RegionId, MarginBasedPricingCalculationResults>)
       : Map<RegionId, PriceControlResult option> =

       let invertMapLevel mapLevel =
           match mapLevel with
           | PriceControlPolicies.Constants.Msp -> 1
           | PriceControlPolicies.Constants.Map -> 2
           | PriceControlPolicies.Constants.NoPrice -> 3
           | _ -> 4

       let sortOffers maybeMarginTarget offers  =
           offers
           |> Seq.choose (fun offer ->
               if offer.sourceSkuMapLevel = PriceControlPolicies.Constants.Map then
                   if Options.checkIfNoneOrNonPostivieDecimal offer.sourceSkuMapPrice then
                       None
                   else
                       let mapPrice = offer.sourceSkuMapPrice.Value * offer.originalSourceSkuFactor
                       Some { offer with offerKind = OfferKind.Price mapPrice }
               else
                   match offer.offerKind with
                   | OfferKind.Price price ->
                       Some { offer with offerKind = OfferKind.Price (price * offer.originalSourceSkuFactor) }
                   | OfferKind.CostWithOptionalPrice (cost, Some price) ->
                       Some { offer with offerKind = OfferKind.CostWithOptionalPrice (cost, price * offer.originalSourceSkuFactor |> Some) }
                   | OfferKind.CostWithOptionalPrice (_, None) ->
                       Some offer
                       )
           |> Seq.map (fun offer ->
               // Amazon 3P offers should have shipping included in their price.
               match (offer.source = Sources.Indirect) && (offer.merchantId <> Constants.AmazonMerchantId) with
               | true ->
                   match offer.offerKind with
                   | OfferKind.Price price ->
                       { offer with offerKind = OfferKind.Price (price + Option.getValueOr 0m offer.shippingAmount) }
                   | OfferKind.CostWithOptionalPrice _ -> offer
               | false -> offer)
           |> Seq.sortBy(fun offer ->
               let priceControlPrice =
                   Offer.tryGetPriceOrTargetPrice offer maybeMarginTarget |> Option.getValueOr Decimal.MaxValue

               priceControlPrice, invertMapLevel offer.sourceSkuMapLevel)

       AllRegions
       |> Seq.map ^fun regionId ->
           //check global override first. This should apply to all regions no matter what
           checkPriceControlOverride priceControlOverride retailSku.id
           |> Option.orElseWith ^fun _ -> maybe {

               let maybeMarginTarget =
                   marginBasedPricingMap.TryFind regionId
                   |> Option.map (fun x -> x.marginTarget)

               let! notSortedOffers = offersMap.TryFind regionId
               let offers =
                   notSortedOffers
                   |> Seq.map ^fun x -> x.offer
                   |> sortOffers maybeMarginTarget
                   |> Seq.toArray
то есть вот это считается отличным читаемым кодом?
источник

IC

Ilya Chernoudov in F# Flood: Be a cheif
Roman
и ты считаешь, что это нормальный код?
он значительно упрощен, но в целом да
источник

R

Roman in F# Flood: Be a cheif
ты в write only сидишь?
источник

R

Roman in F# Flood: Be a cheif
Переслано от Ayrat Hudaygulov
щас я вам простыни говнокода буду кидать
источник

R

Roman in F# Flood: Be a cheif
то есть вот это считается отличным читаемым кодом?
источник

AH

Ayrat Hudaygulov in F# Flood: Be a cheif
Ilya Chernoudov
то есть вот это считается отличным читаемым кодом?
ну учитывая сложность домена, я не знаю что тебе сказать. это просто работало
источник

R

Roman in F# Flood: Be a cheif
Ilya Chernoudov
он значительно упрощен, но в целом да
штош, ясно. А чем это лучше пропертей?
источник

IC

Ilya Chernoudov in F# Flood: Be a cheif
Ayrat Hudaygulov
ну учитывая сложность домена, я не знаю что тебе сказать. это просто работало
обычное дело! а от F# стало сильно легче?
источник

I

Igor in F# Flood: Be a cheif
Ayrat Hudaygulov
да я чот думал что поместится
Не благодари (gist) 😏
источник

AH

Ayrat Hudaygulov in F# Flood: Be a cheif
Ilya Chernoudov
обычное дело! а от F# стало сильно легче?
да, намного
источник

IC

Ilya Chernoudov in F# Flood: Be a cheif
Roman
штош, ясно. А чем это лучше пропертей?
тем что это не проперти, а описание того, как надо рассчитывать те или иные свойства
источник

IC

Ilya Chernoudov in F# Flood: Be a cheif
и в том числе они могут быть асинхронные
источник

AH

Ayrat Hudaygulov in F# Flood: Be a cheif
Igor
Не благодари (gist) 😏
у тебя тоже не поместилось!
источник

IC

Ilya Chernoudov in F# Flood: Be a cheif
короче, судя по всему люди тут не приемлют возможность того, что можно написать нормальный код не на F# или другом функциональном языке
источник

IC

Ilya Chernoudov in F# Flood: Be a cheif
всё таки принятие аргументов - вещь субъективная
источник

R

Roman in F# Flood: Be a cheif
Ilya Chernoudov
тем что это не проперти, а описание того, как надо рассчитывать те или иные свойства
какая нахуй разница, в проперти описывать или в билдере? Ну кроме того, что тут мы еще либу подключили для этого.
источник

I

Igor in F# Flood: Be a cheif
Ayrat Hudaygulov


               return!
                   //check manufacturer which is region specific
                   checkManufacturerCatalog priceControlsManufacturerCatalog offers maybeMarginTarget
                   |> Option.orElseWith ^fun _ -> maybe {
                       let retailSkuCategory: CategoryId = int retailSku.category
                       let! merchants = approvedCompetitiveSourcesMap.TryFind regionId
                       let approvedCompOffers =
                           offers
                           |> Array.filter ^fun offer -> merchants.Contains offer.merchantId ||
                                                         offer.source = OfferSource.Indirect
                       let directApprovedCompOffers =
                           approvedCompOffers
                           |> Array.filter ^fun offer -> offer.source = OfferSource.Merchant ||
                                                         offer.source = OfferSource.Jet
                       return!
                           //check brand override which is region specific
                           checkBrandOverride priceControlBrandRules taxonomyItems brandOption offers approvedCompOffers directApprovedCompOffers retailSkuCategory maybeMarginTarget
                           ////check category override which is region specific
                           |> Option.orElseWith ^fun _ -> checkCategoryOverride priceControlCategoryRules taxonomyItems offers approvedCompOffers directApprovedCompOffers retailSkuCategory maybeMarginTarget
                           ////check other overrides which is region specific
                           |> Option.orElseWith ^fun _ -> checkOtherSources priceControlDefaultRule isOnePNode approvedCompOffers directApprovedCompOffers maybeMarginTarget
                   }
           }
           |> tuple2 regionId
       |> Map.ofSeq
Ну насколько я вижу, он хотя бы pure, уже +2 бала)

Скажи как плиз: ^ тут твой код, или у вас до тебя так писали?
источник